Closed-World-Ausführung
Das Schließen des Instruktionssatzes ist nur ein Fall eines Zuges, den der Kernel viermal macht. Jedes Mal wird der Raum des Möglichen vorab aufgezählt, und was außerhalb liegt, wird abgelehnt statt behandelt.Operationen
Eine Payload, die nicht Element der aufgezählten Menge ist – abgelehnt bei der Validierung, nicht zur Laufzeit
Was tatsächlich verlangt wurde
Wahrheit
Den Arbeitssatz eines Blocks als maßgeblich zu behandeln. Er ist ein Journal; die Quelle ist der Engine-Zustand
Was gerade wahr ist
Eingaben
Alles, was sich zwischen zwei Maschinen unterscheiden kann: Uhr, Entropie, Gleitkomma, Hash-Reihenfolge
Ob eine andere Node dieselben Bytes erhält
Kausalität
Eine Zustandsänderung ohne Urheber. Effekte, die zu keiner Nutzertransaktion gehören, laufen über einen Systemkanal, nicht über eine Ausnahme
Warum genau diese Änderung geschah
Geschlossen
Abgelehnt
Damit beantwortet das Ledger
Vier Schließungen, ein Zug: den Raum vorab aufzählen und alles ablehnen, was außerhalb liegt.
Der Befehlssatz
Alles, was ein Teilnehmer oder ein Validator tun kann, stammt aus einer festen Menge typisierter Operationen:
Eine Transaktion, deren Nutzlast nicht zu dieser Menge gehört, wird bei der Validierung abgelehnt. Die Menge ändert sich nur durch ein Protokoll-Upgrade, nie dadurch, dass jemand etwas Neues deployt.
Einen Block ausführen
Die Ausführung ist eine feste Folge von Stufen. Die Reihenfolge ist kein Implementierungsdetail – sie entscheidet, ob eine Liquidation den Preis sieht, der sie ausgelöst hat, und ob eine Stornierung einer eingehenden aggressiven Order zuvorkommt.PreisMarks für den Block fixieren
LadenKonten und Orders des Blocks einlesen
FundingFunding-Ströme abrechnen
RisikoVault-Deleveraging → Liquidation → ADL
MatchingVorstufe → Matching → Nachstufe
FinalisierenAusgaben sammeln, toten Zustand löschen
Jede weitere Stufe rechnet mit einem Preis je Instrument statt mit einem laufenden
Abgerechnet gegen die geladenen Positionen, nicht die späteren
Erzwungener Fluss ist aufgelöst, bevor neuer diskretionärer zugelassen wird
Weil es nach Risiko läuft, kann keine Order im selben Block einer Liquidation zuvorkommen
Genullte Positionen und leere Konten bleiben nicht
Ein Block, sechs Stufen
Was der Platz bestimmt
Bedingte Orders werden in dieser Folge geprüft und weitergeführt: Ein von den Marks dieses Blocks gefeuerter Auslöser wirkt hier, nicht erst im nächsten Block.
Dass die Liquidation vor dem Matching läuft, ist der Grund, warum einer Liquidation keine Order im selben Block zuvorkommen kann. Der liquidierende Fluss ist bereits aufgelöst, wenn diskretionäre Orders gematcht werden.
Zwei Arten von Zustand
Der Kernel trennt strikt zwischen dem, was fortbesteht, und dem, was nur Zwischenstand ist.während ein Block läuft
Engine-ZustandMärkte · Konten · Bücher · Positionen · Clearingstelleüber Blöcke hinweg
Block-Working-SetMarks · berührte Konten · Ausführungen · Ausgabennur für einen Block
Festgeschriebener Chain-Zustandversioniert · authentifiziertmaßgeblich
Änderungsverfolgung ist nicht Maßgeblichkeit. Was sich im Block geändert hat, baut deterministische Ausgaben – dort liegt der Zustand nicht.
maßgeblich – die Engine wird daraus gebaut
liest
anwenden
materialisieren
Warum das Ergebnis reproduzierbar ist
Determinismus wird hier erzwungen, nicht erhofft. Jede ehrliche Node, die denselben Block gegen denselben Vorzustand ausführt, erzeugt Byte für Byte dasselbe Ergebnis, weil nichts auf dem Ausführungspfad etwas lesen kann, das sich zwischen Nodes unterscheidet:- Durchgehend Festkommaarithmetik. Die Abrechnungsmathematik läuft auf ganzzahligem Festkomma mit expliziter Rundungssemantik – Aufrunden bei negativen Exponenten in der Margin, Abrunden (floor) und Aufrunden (ceiling) bei Gebühren. Auf dem Abrechnungspfad gibt es kein Gleitkomma, denn ein Rundungsunterschied zwischen zwei Maschinen ist ein Fork.
- Keine Systemzeit. Die Reihenfolge innerhalb eines Blocks nutzt die vom Konsens festgeschriebene kanonische Position und den Block-Zeitstempel, nie die lokale Systemzeit.
- Kein Zufall zur Laufzeit. Was Zufall braucht, leitet ihn deterministisch aus dem Chain-Zustand ab.
- Deterministische Iteration. Jede Sammlung, deren Iterationsreihenfolge in der Ausgabe beobachtbar ist, ist sortiert und nicht hash-randomisiert.
Risikoformeln sind rein
Die Formeln, die über Margin-Anforderungen, Liquidationspreise, Deleveraging-Auswahl, Gebühren und Open-Interest-Limits entscheiden, sind als reine, zustandslose Funktionen umgesetzt. Sie nehmen Werte entgegen und geben Werte zurück; sie lesen und verändern keinen Ledger-Zustand. Zustandsänderungen werden ausschließlich von der Clearingstelle angestoßen, die diese Funktionen aufruft und die Ergebnisse anwendet. Die Module, die Zustand halten – Konten, Positionen, Orderbücher –, speichern Daten und stellen Mutatoren bereit, treiben aber selbst keinen fachlichen Ablauf. Das ist eine bewusste Grenze. Sie bedeutet, dass sich eine Margin-Berechnung isoliert gegen eine Tabelle aus Eingaben und Ausgaben prüfen lässt, und sie bedeutet, dass es genau einen Codepfad gibt, über den sich das Guthaben von irgendjemandem ändern kann.Ausgabe
Die Ausführung erzeugt Zustandsschreibvorgänge und Events, jeweils gebunden an die Transaktion, die sie verursacht hat, dazu einen Kanal für Effekte auf Systemebene, die zu keiner einzelnen Nutzertransaktion gehören – Funding, Bewegungen des Versicherungsfonds, Blockzähler. Daraus werden die Transaktionsausgaben, die die Zustandsschicht festschreibt und der Indexer ausliefert. Nichts, was im Kernel geschieht, bleibt nachgelagert unsichtbar. Wenn es Zustand geändert hat, steht es in der Ausgabe von jemandem oder im Systemkanal.Wie es weitergeht
Matching
Das Orderbuch, die Preis-Zeit-Priorität und wie Gültigkeitsdauer und Selbstausführungsschutz aufgelöst werden.
Clearingstelle
Der einzige Pfad, über den sich Guthaben, Positionen und Margin ändern.
Zustandsmodell
Was aus der Ausgabe des Kernels wird, sobald sie festgeschrieben ist.
IntentionBFT
Woher die Reihenfolge und die Preise stammen.