Für alle / Wie es funktioniert

Der Weg einer Transaktion

Von Ihrer Wallet bis Ethereum in fünf Schritten, die meisten davon schneller, als Sie sehen können. Diese Seite ist die Maschine; die Seite zu den Bestätigungen ist das, was jeder Schritt verspricht.

Der Weg

Sie signieren etwas in Ihrer Wallet und senden es. Es kommt bei einem Computer an, dem Sequencer, der es aufschreibt, damit es nicht verloren gehen kann, die Arbeit sofort erledigt und die Antwort kennt, bevor Sie den Knopf losgelassen haben. Viele Male pro Sekunde bündelt der Sequencer die Antworten, die er gerade erzeugt hat, signiert das Bündel und veröffentlicht es. Etwas seltener hüllt er diese Bündel in einen Block, der genau wie ein Ethereum-Block aussieht, und das ist es, was Ihnen Ihre Wallet und der Explorer zeigen.

Dann, getrennt davon, schreibt er alles auf, was in diesem Block war, und sendet einen Fingerabdruck der Liste an Ethereum. Jeder kann die Liste nehmen, sie selbst nachspielen und prüfen, dass er dieselbe Antwort erhält. Dieser letzte Schritt macht Pickle zu einem Teil von Ethereum statt nur zu einem schnellen Computer, der das behauptet.

1. Sie senden sie. Ihre Wallet signiert die Transaktion und reicht sie über standardmäßiges JSON-RPC beim Sequencer ein, dem einzelnen Prozess, der die Chain betreibt.

2. Sie wird angenommen und dauerhaft gemacht. Der Sequencer ermittelt den Signierer, setzt die Transaktion in eine begrenzte Warteschlange und hängt sie an ein Log mit Prüfsumme auf der Festplatte an, bevor er sie ausführt, sodass eine bestätigte Transaktion einen Absturz überlebt.

3. Sie wird sofort ausgeführt. Ein einzelner Koordinator schreibt Transaktionen in Annahmereihenfolge fest. Das Receipt existiert, bevor es irgendeinen Block gibt.

4. Sie wird vorbestätigt, dann bestätigt. Bei einem Planungsziel von 10 Millisekunden werden die Transaktionen des Intervalls in einen signierten Mini-Block versiegelt; bei einem Planungsziel von 250 Millisekunden werden die Mini-Blöcke des Intervalls in einen standardmäßigen EVM-Block mit einer Nummer gehüllt, die jedes Werkzeug versteht.

5. Sie wird auf Ethereum festgeschrieben. Jeder versiegelte Block erzeugt eine Payload mit seiner vollständigen Transaktionsliste, gespeichert in einer Datenverfügbarkeitsschicht, und pro Planungsziel von 60 Sekunden wird eine Festschreibung an einen Inbox-Contract auf Ethereum gesendet. Daraus führt jeder, der eine Replika betreibt, jede Transaktion erneut aus und kommt zum selben Zustand.

Die RPC-Schicht ermittelt den Signierer und setzt die Transaktion in eine begrenzte Annahme-Warteschlange mit einer Obergrenze pro Absender; eine volle Warteschlange gibt einen Fehler zurück, statt den Speicher unbegrenzt wachsen zu lassen. Jede angenommene Transaktion wird an ein Write-Ahead-Log mit Prüfsumme angehängt und dauerhaft gemacht, bevor sie ausgeführt wird, ein fsync pro Batch. Ein einzelner Ausführungskoordinator schreibt in Annahmereihenfolge fest und führt denselben Absender niemals gleichzeitig aus, was die Nonce-Sicherheit ohne einen Umordnungsschritt im Mempool bewahrt. Die Ausführung ist sofortig, das Receipt existiert also, bevor der enthaltende Block versiegelt ist.

Ein Produzent versiegelt einen Mini-Block beim Planungsziel von 10 ms: die Transaktionen, Receipts und Logs des Intervalls, einen State-Diff-Hash, einen Zeitstempel in Mikrosekunden und eine Sequencer-Signatur über den Header. Ein zweiter Produzent versiegelt beim Planungsziel von 250 ms einen EVM-Block in Cancun-Form, der die Mini-Blöcke des Intervalls umhüllt; der Zeitstempel des nächsten Blocks wird festgelegt, wenn der vorige versiegelt wird, sodass eine Transaktion, die den Block-Zeitstempel liest, den Wert sieht, auf den sich der Header festlegt. Jeder versiegelte Block gibt eine Ableitungs-Payload, vollständige Transaktionsliste, Blockbereich, Parent-Hash, Block-Hash und festgeschriebener Zeitstempel, an eine inhaltsadressierte Datenverfügbarkeitsschicht ab, und pro Planungsziel von 60 s wird ein Envelope in die L1-Inbox geschrieben, mit Calldata als Rückfallebene.

Drei dieser Schritte tragen eine Zahl, und keine ist ein Versprechen

Die Werte von 10 Millisekunden, 250 Millisekunden und 60 Sekunden sind Planungsziele, die Intervalle, die der Sequencer anstrebt. Keiner ist eine Latenzgarantie, und keiner ist eine Durchsatzbehauptung.

Der Lebenszyklus, Schritt für Schritt

  1. Ein Client reicht eine signierte Transaktion über standardmäßiges JSON-RPC ein.
  2. Die RPC-Schicht ermittelt den Signierer und setzt die Transaktion in eine begrenzte Annahme-Warteschlange mit einer Obergrenze pro Absender. Eine volle Warteschlange gibt einen Fehler zurück, statt den Speicher unbegrenzt wachsen zu lassen.
  3. Ein einzelner Ausführungskoordinator schreibt Transaktionen in Annahmereihenfolge fest. Derselbe Absender wird niemals gleichzeitig ausgeführt, was die Nonce-Sicherheit ohne einen Umordnungsschritt im Mempool bewahrt.
  4. Die Ausführung ist sofortig. Das Receipt existiert, bevor der enthaltende EVM-Block versiegelt ist.
  5. Jede angenommene Transaktion wird an ein Write-Ahead-Log mit Prüfsumme angehängt und dauerhaft gemacht, bevor sie ausgeführt wird, ein fsync pro Batch, sodass eine bestätigte Transaktion einen Absturz überlebt.

Drei Arten der Ausführung

Der Sequencer führt nicht jede Transaktion auf dieselbe Weise aus. Er erkennt drei Formen und nimmt für jede den kürzesten korrekten Pfad:

  • Ein einfacher ETH-Transfer nimmt einen nativen Pfad, ohne die virtuelle Maschine überhaupt zu starten.
  • Der kanonische ERC-20-Transfer nimmt einen Schnellpfad, der den Guthaben-Slot direkt bewegt und das Standard-Event ausgibt, mit demselben Ergebnis, das die vollständige Maschine liefern würde.
  • Alles andere läuft durch die allgemeine EVM, das ist revm, festgelegt auf den Cancun-Hardfork.

Alle drei berechnen standardmäßiges Gas und teilen die Gebühr auf dieselbe Weise, sodass Sie an der Gebühr nicht erkennen können, welcher Pfad genommen wurde, und das sollten Sie auch nicht müssen. Die Schnellpfade existieren, weil der Großteil des Verkehrs einer Chain aus den zwei einfachsten Transaktionsarten besteht, und dort geht die Zeit hin.

Warum es deterministisch ist

Zwei Dinge, die andere Chains dem Betreiber überlassen, sind hier Konstanten zur Kompilierzeit: der Ausführungs-Hardfork und der Mindestgaspreis. Wären sie einstellbar, könnte eine Replika eine Transaktion ablehnen oder neu bepreisen, die der Sequencer angenommen hat, und die unabhängige Ableitung würde anhalten. Dieselbe Überlegung legt den Zeitstempel des nächsten Blocks bei der vorigen Versiegelung fest und macht das Mini-Block-Intervall zu einem Konsensparameter statt zu einer Einstellung pro Betreiber: Eine Replika muss sich darüber einig sein, wie der Strom geschnitten wird, um dieselben Hashes zu reproduzieren.

Warum es so gebaut ist

Die ungewöhnliche Entscheidung ist, vor dem Versiegeln auszuführen. Auf den meisten Chains wartet eine Transaktion auf den nächsten Block und wird als Teil seines Aufbaus ausgeführt; hier wird sie bei Eintreffen ausgeführt, und die Blöcke werden danach aus Ergebnissen zusammengesetzt, die bereits existieren. Das macht den ersten Moment schnell, und deshalb existiert der Mini-Block als etwas Eigenes neben dem Block: Der Mini-Block ist der Sequencer, der seine Signatur auf Ergebnisse setzt, die er bereits berechnet hat, während der gewöhnliche Block in seinem eigenen Rhythmus dahinter eintrifft. Was jeder Moment garantiert, steht auf der Seite zu den Bestätigungen, und wo die Aufzeichnung landet, auf der Seite zum Settlement.