Skip to main content
Die Chain schreibt Blöcke fest. Anwendungen stellen Fragen wie welche Ausführungen hatte dieses Konto letzte Woche und wie sieht das Buch gerade aus – Fragen, die ein blockförmiger Datensatz schlecht beantwortet. Der Indexer ist das, was das eine in das andere überführt. Auf den meisten Chains ist der Indexer infrastrukturkritisch: Die Chain gibt undurchsichtige Events aus, Dritte rekonstruieren daraus die Bedeutung, und was Ihre Anwendung für wahr hält, hängt davon ab, welchem Indexer sie vertraut. Hier entfällt der Rekonstruktionsschritt. Der Kernel gibt typisierte, zugerechnete Ausgabedaten aus – jede Zustandsänderung ist bereits an die Transaktion gebunden, die sie verursacht hat –, sodass der Indexer Daten umformt, statt sie zu erschließen. Das ändert, wozu der Indexer da ist. Er ist eine Auslieferungsschicht, keine Quelle der Wahrheit. Alles, was er meldet, lässt sich gegen die Chain prüfen, und eine Abweichung ist ein Fehler im Indexer und keine offene Frage.

Der Pfad

nach Alter geteilt
Full Nodefestgeschriebene Blöcke, typisiert gestreamt
Cacheaktuell – aus dem Speicher
Dateispeicherhistorisch – dauerhaft
Datendienstzeigt beides als einen Stream
Gateway → REST · WebSocketZugriff, Quoten, Routing
Warum es die Trennung gibtDem Chain-Kopf zu folgen ist latenzempfindlich und klein; historische Abfragen sind durchsatzempfindlich und groß. Ein Backfill auf demselben Pfad würde den Live-Pfad blockieren.
Eine Auslieferungsschicht, keine Quelle der WahrheitDer Kernel gibt typisierte, zugerechnete Daten aus, also formt der Indexer um, statt zu erschließen. Eine Abweichung von der Chain ist ein Fehler im Indexer.
Eine Full Node ist der Ursprung. Handelsdatensätze werden aus ihr als typisierte Daten gestreamt, nicht als rohe Transaktionen, die erst interpretiert werden müssen. Cache und Dateispeicher teilen den Stream nach Alter auf. Aktuelle Daten werden aus dem Arbeitsspeicher bedient, weil die meisten Konsumenten genau das wollen und weil es auf die Latenz ankommt. Historische Daten werden in dauerhaften Dateispeicher geschrieben, denn alles im Arbeitsspeicher vorzuhalten ist keine Strategie. Ein Konsument, der etwas Altes abfragt, und einer, der dem Chain-Kopf folgt, werden aus verschiedenen Quellen bedient, ohne dass einer von beiden es merkt. Der Datendienst präsentiert beides als einen Stream. Ein Client fordert einen Bereich an, der irgendwo beginnt; ob dieser Bereich aus dem Cache, aus Dateien oder aus beidem bedient wird, ist nicht sein Problem. Das Gateway übernimmt, was zwischen einen Dienst und das öffentliche Internet gehört: Zugriff, Kontingente und Routing. Die REST- und WebSocket-Schnittstellen sind das, was Anwendungen tatsächlich nutzen – Marktdaten, Order- und Ausführungshistorie, Positionen, Kontozustand, Funding-Zahlungen und Live-Abonnements. Die Details auf Endpunktebene stehen in der API-Referenz.

Warum es die Trennung gibt

Ein einzelner Dienst, der zugleich dem Chain-Kopf folgt und historische Abfragen beantwortet, könnte beides nicht gut. Das Verfolgen des Chain-Kopfs ist latenzempfindlich und klein; historische Abfragen sind durchsatzempfindlich und groß, und ein einziges großes Backfill würde den Live-Pfad blockieren. Die Trennung bedeutet: Ein Monate zurückreichendes Backfill für einen neuen Konsumenten verschlechtert den Feed eines Market Makers am Chain-Kopf nicht, und beide lassen sich unabhängig skalieren – was auch nötig ist, weil ihre Lastprofile nichts gemeinsam haben.

Worauf man sich verlassen kann

Verlässlich. Alles, was der Indexer ausliefert und aus festgeschriebenen Blöcken abgeleitet ist: Ausführungen, Orders, Positionen, Funding-Zahlungen, Transfers, Marktdaten. Das sind umgeformte Ausgabedaten der Chain. Etwas anderes. Alles, was noch nicht festgeschrieben ist. Eine Order, die in den Mempool aufgenommen wurde, hat noch keinen Platz in der Reihenfolge, und der Indexer hat dazu nichts zu sagen. Fehlt etwas im Indexer, ist es noch nicht festgeschrieben – nicht abgelehnt. Überprüfbar. Wenn eine Antwort wichtig genug ist – ein Abrechnungsstreit, ein Audit, ein buchhalterischer Abgleich –, lässt sie sich direkt gegen die Chain prüfen, statt sie dem Indexer zu entnehmen. Eine eigene Full Node ist die stärkste Form davon – wer sich keinen Irrtum leisten kann, sollte eine betreiben. Siehe Node betreiben.
Zwei Konsumenten, die denselben festgeschriebenen Bereich lesen, sollten dieselbe Antwort erhalten. Wenn nicht, liegt die Abweichung im Auslieferungspfad und ist ein Fehler, den man melden sollte – keine inhärente Eigenschaft davon, eine Chain über einen Indexer zu lesen.

Wie es weitergeht

Zustandsmodell

Was der Indexer liest und welche Darstellung maßgeblich ist.

Entwickler

REST- und WebSocket-Schnittstellen, SDKs und Werkzeuge.

Node betreiben

Selbst gegen die Chain prüfen, und warum das Set geschlossen ist.

Programmdienste

Was diesen Stream konsumiert, um abgeleiteten Kontozustand zu berechnen.