Wie es im gelben Papier heißt:
Transaktionsbeleg. Um Informationen über eine Transaktion zu verschlüsseln, für die es nützlich sein kann, einen Zero-Knowledge-Beweis oder einen Index und eine Suche zu erstellen, verschlüsseln wir eine Quittung jeder Transaktion, die bestimmte Informationen über ihre Ausführung enthält. Jede Quittung, die für die i-te Transaktion mit BR[i] bezeichnet wird, wird in einen mit einem Index versehenen Trie platziert, und die Wurzel wird im Header als He aufgezeichnet.
Die Transaktionsquittung ist ein Tupel aus vier Elementen, die den Zustand nach der Transaktion umfassen, R, das kumulative Gas, das in dem Block verwendet wird, der die Transaktionsquittung enthält, unmittelbar nachdem die Transaktion stattgefunden hat, Ru, den Satz von Protokollen, die durch die Ausführung der Transaktion erstellt wurden , Rl und der Bloom-Filter, der sich aus Informationen in diesen Protokollen zusammensetzt, Rb:
R = (R;Ru;Rb;Rl)
Kann jemand mehr Details darüber geben, wie diese Rl
(Protokolle) strukturiert sind und wie die Rb
(Bloom-Filter) daraus aufgebaut sind?
Ich habe einige Nachforschungen über Bloom-Filter angestellt und Broder und Mitzenmacher geben an, dass:
Überall dort, wo eine Liste oder ein Satz verwendet wird und der Speicherplatz knapp ist, sollten Sie die Verwendung eines Bloom-Filters in Betracht ziehen, wenn die Auswirkungen von Fehlalarmen abgeschwächt werden können.
Wie verhält sich das also zum rationalen Design von Ethereum?
Ereignisse im Ethereum-System müssen einfach gesucht werden, damit Anwendungen Ereignisse, einschließlich historischer Ereignisse, ohne übermäßigen Overhead filtern und anzeigen können. Gleichzeitig ist Speicherplatz teuer, daher möchten wir nicht viele doppelte Daten speichern – wie etwa die Liste der Transaktionen und die von ihnen generierten Protokolle. Um dieses Problem zu lösen, gibt es den Log-Bloom-Filter.
Wenn ein Block generiert oder verifiziert wird, werden die Adresse eines Protokollierungsvertrags und alle indizierten Felder aus den Protokollen, die durch die Ausführung dieser Transaktionen generiert wurden, zu einem Bloom-Filter hinzugefügt, der im Block-Header enthalten ist. Die eigentlichen Protokolle sind aus Platzgründen nicht in den Blockdaten enthalten.
Wenn eine Anwendung alle Protokolleinträge aus einem bestimmten Vertrag oder mit bestimmten indizierten Feldern (oder beiden) finden möchte, kann der Knoten schnell den Header jedes Blocks scannen und den Bloom-Filter überprüfen, um festzustellen, ob er möglicherweise relevante Protokolle enthält. Wenn dies der Fall ist, führt der Knoten die Transaktionen aus diesem Block erneut aus, generiert die Protokolle neu und gibt die relevanten an die Anwendung zurück.
Henrique Barcelona
Nick Johnson
Henrique Barcelona
Nick Johnson
Henrique Barcelona
k
Hashes verwenden, mitk>=1
, aber wennk=1
, verhält es sich genau wie ein Hash. Wenn wir nur Keccac-256 verwenden, was sind die Vorteile?Nick Johnson
Thomas JayRush
Thomas JayRush
Thomas JayRush
Nick Johnson
Alper