
Quelle: Dengchain Community
In dem heutigen Artikel werden wir uns mit Solidität befassenEreignisEs wird in häufigerer Ethereum und EVM aufgerufenProtokolleWesenWir werden sehen, wie man sie verwendet, ihre Definitionen, die Verwendung des Themas des Ereignisses und die Signatur, um das Protokoll zu filtern, und einige Vorschläge, wann.
Wir werden auch die Inspektion verdecken.Ereignis-Der Interaktionsmodus wird dieses berühmte Modell traditionell auf das Re -Einkommen staatlicher Variablen angewendet. Wir werden jedoch sehen, warum dieses Modell auch angewendet werden sollte, um Ereignisse und potenzielle Risiken und Sicherheitslücken auszulösen.
Wie definiere ich Ereignisse in Solidität?
Verfügbar seinEreignis
Das Schlüsselwort definiert das Ereignis in Solidität, wie unten gezeigt.
interface ilight {< BR/> Ereignis Switchon ();Sie können den Namen des Vertrags über einen vollständigen begrenzten Zugang verfolgen, gefolgt von folgenDann dann
Sozug auf das Ereignis von einem anderen Vertrag mit dem Ereignisnamen, wie unten gezeigt:
Event-Kleid-Benutzer)
Die Ereignissignatur ist:
Ereigniskleiderbenutzer)
Das Thema der Veranstaltung lautet:
bytes32 topichash = UccessFoy .Selector;
Bitte beachten Sie, dass der Vorfall erst nach der Solidität v0.8.15 wird.Wähler
Mitglieder können es benutzen.
Wenn Sie ein Blockchain -Protokoll überprüfen, finden Sie den Index des Themas des Protokolls0
(Der erste) Der Zweck entspricht dem Thema der Veranstaltung.Da das Thema der Inhalt ist, der durch ein Protokoll durchsucht werden kann, können wirFilter mit dem Thema der Veranstaltung:
-
Suchen Sie nach bestimmten Ereignissen im Smart -Vertrag einer bestimmten Adresse.
-
Suchen Sie nach bestimmten Ereignissen in allen Verträgen auf der Blockchain.
Wir werden es weiter unten sehen,
anonym
Anonymer Ereignis ist die Ausnahme dieser Regel.anonym
Schlüsselwörter lassen sie nicht suchen. Verwenden Sie den Begriff daher„anonym“Wesen
Basierend auf dieser Tatsache können wir auch schließen, dass das einfachste in Solidität definierte Ereignis keine Parameter hat, wie das oben definierte EreignisBulbreplaced
oderSwitchon
, Wird unten verwendetLog1
Der Betriebscode löst das Thema im Protokoll aus, da der Vorfall selbst durchsucht werden kann.
Sie können weitere Themen hinzufügen, andere Themen werden verwendetLog2
,,,,Log3
,,,,Log4
UndLog5
Solange diese Parameter als markiert sind alsindiziert
WesenSchauen wir uns den Indexparameter im nächsten Abschnitt an.
Ereignisparameter und Indexparameter
Das Ereignis kann jede Art von Parametern akzeptieren, einschließlich Werttyp (WertUintn
,,,,Bytesn
,,,,bool
,,,,Adresse
…) ,,Struktur
,,,,Aufreum
Und den vom Benutzer definierten Werttyp.
Nach meiner Forschung in diesem Artikel ist der einzige Typ, der nicht zulässig ist, der interne Funktionstyp.Der externe Funktionstyp ist zulässig, der interne Funktionstyp ist jedoch nicht zulässig.Beispielsweise wird der folgende Code nicht kompiliert.
// spdx- S Lizenz-Identifizierer: Nicht lizenziert
Pragma Soliday ^0.8.0; >
Wenn die Ereigniserklärung istanonym
Im Vertrag ABI ist der Vorfall verfügbar„Anonym“
Das Feld wird als markiert alsWAHR
Wesen

Ein anonymer Vorteil ist, dass Ihr Vertrag Ihren Vertrag billiger und billiger macht, und Gas ist billiger, wenn Sie ausgelöst werden.
Ein guter Fall einer anonymen Veranstaltung ist ein Vertrag mit nur einem Ereignis.Alle Ereignisse im Verhandlungsvertrag sind aussagekräftig, da nur dieser Vorfall im Ereignisprotokoll angezeigt wird.Abonnieren Sie seinen Namen irrelevant, da nur ein einziges Ereignis definiert ist, um den Vertrag auszugeben.Daher können Sie Ereignisse anonym definieren, alle Ereignisprotokolle aus dem Vertrag abonnieren und bestätigen, dass es sich um die gleichen Ereignisse handelt.
Überprüfen Sie die Verwendung der anonymen Verwendung in der beliebten Code-Bibliothek, wie z. B. DS-NOTE-Vertrag in DAPPPHUB[7]Mitte.

Wir können im obigen Codefragment sehen, dass dies, da die Ereignisanweisung anonym ist, dies den vierten „indizierten“ Parameter definieren kann.
Bitte beachten Sie, dass das anonyme Ereignis, da das anonyme Ereignis nicht das Thema von Bytes32 hat, nicht unterstützt.Wähler
Mitglied.
Verwenden Sie den Protokollbetriebscode, um Ereignisse in der Montage auszulösen

Es ist möglich, ein Ereignis in der Baugruppe auszulösen, verwendenLogn
Anweisung entspricht der Befehl dem Operation Code, der durch die EVM -Anweisung konzentriert ist.
Um ein Ereignis in der Montage auszulösenErinnerung
Spezifische Position.
Sobald Sie Daten aus dem Ereignis im Speicher speichern, können Sie die folgenden Parameter in der Anweisung für Protokolle angeben:
-
P = die Speicherposition der Daten davon abrufen.Grundsätzlich ist dies ein Speicherzeiger oder ein „Offset“ oder „Speicherindex“, je nachdem, wie Sie es nennen.
-
S = Sie möchten, dass die Anzahl der Bytes von P im Fall ausgestellt wird.
-
Alle anderen Parameter
T1
SowieT2
SowieT3
UndT4
Es sind die Ereignisparameter, die Sie indexiert werden möchten.Bitte beachten Sie, dass es hier zwei wichtige Dinge gibt: 1) Diese Parameter sollten mit den in derselben Reihenfolge definierten Parametern wie der Definition Ihrer Ereignisse übereinstimmen. 2) Diese Parameter sollten in den Speicher platziert werden, um Daten zu erhalten.
Das folgende Codefragment zeigt, wie dieser Vorgang in der Montage durchgeführt wird.
Bytes32 Topichash = BeispielEventasM.Selector; /> Log2 (
FreememoryPointer, /// `p` p` p` p` p` p` p` p` p` p` p` p` p` p` p` p` p` p` p` P` P` p` p` p` p` = Startenversatz in Speicher
64, // `s` = Anzahl der Bytes in Speicher aus“ P „in die Ereignisdaten
Thema zum Filtern der Filterung der Ereignis it self
Tokenid // 1. indizierter Parameter
)
}
}
Gaskosten der Veranstaltung

Alle Datensatzvorgangscode (Log0
SowieLog1
SowieLog2
SowieLog3
SowieLog4
) Sie müssen Gas konsumieren.Je mehr Parameter (Themen) sie haben, desto mehr konsumiert sie.

Darüber hinaus können andere Faktoren wie Indizes oder Daten dazu führen, dass das Ereignis mehr Gas verbraucht.
Prüfen
Check-Effective-Interactive-Modus[9]Es ist auch für Vorfälle geeignet.
Eine Methode zum Erkennen dieser Modi ist die Verwendung des Remix Static Analysis Tool.
Dieses Modell kann auch durch Slither erkannt werden.Wenn ein Vertrag einen Vertrag mit einem externen Anruf ausführt, erhalten Sie eine Entdeckung, um das „Re -entreing -Ereignis“ zu veranlassen.
Daher ist die Bestellung für DAPP sehr wichtig, damit Sie zuerst den Vorfall als nächstes überprüfen und schließlich ausgestellt haben.Dies ist besonders wichtig, wenn rekursive oder wieder eingerichtete Anrufe eingereicht werden.Wenn das Ereignis nach externen Aufrufen ausgelöst wird und dieser externe Anruf aus einem wiederholten Anruf besteht, dann:
-
Der erste Vorfall war das zweite Mal, nachdem der Anruf abgeschlossen war.
-
Das zweite Ereignis wurde nach der ersten Transaktion ausgestellt.
-
Wenn eingeschränkte Benutzer und Adresse bestimmte Vorgänge ausführen (z. B. Eigentümer oder Vertragsadministrator).Dies schließt wie beliebte ein
Eigentümer übertragen (Adresse)
Funktion, diese Funktion kann nur vom Eigentümer aufgerufen werden, um den Vertragsinhaber zu ändern. -
Ändern Sie einige wichtige Variablen oder arithmetische Parameter, die für die Kernlogik des Vertrags verantwortlich sind.Es ist besonders wichtig im Hintergrund des Defi -Protokolls.
-
Überwachungsverträge, die in der Produktion eingesetzt werden, um Abnormalitäten zu erkennen.
-
Das fehlende Dokument zum Zweck der Verwendung eines anonymen Ereignisses (wissen Sie warum)
[14] -
[Vorteile einer anonymen Veranstaltung]
Wenn Sie dies verstehen, können Sie auch eine klare Prüfungsverfolgung unter der Kette überwachen, um Vertragsanrufe zu überwachen.Sie können sehen, welche Funktionen zuerst und schließlich aufgerufen werden, und in der laufenden Reihenfolge jeder Routine während der Ausführung der Transaktion.
Dokumentation der Detektordokumentation[10]-Stidität und Vyper’s statische Analysatoren.
Diese potenzielle Sicherheitsanfälligkeit liegt auch auf der Spur von Teilen[11]Gefunden und Bericht bei der Prüfung von intelligenten Verträgen.


Wann sollte der Vorfall ausgelöst werden?
In Ihrem Vertrag kann es mehrere Fälle geben, die wichtig und nützlich sein können, um Ereignisse auszulösen.


Dokumentation der Detektordokumentation[12]Beschreiben Sie weitere Informationen zu diesen Situationen.
Dies wird auch im Trail Audit -Bericht von LooksRare beschrieben.


Ansicht 0xProtocol[13]Details, um die sicherheitsbezogenen Probleme im Zusammenhang mit dem Vorfall zu verstehen.