TL;DR: RPC und Indizierung sind zwei grundlegend unterschiedliche Ansätze für den Zugriff auf Blockchain-Daten. Mit RPC-Endpunkten können Sie den aktuellen Zustand der Blockchain in Echtzeit abfragen, jeweils eine Anfrage nach der anderen. Bei der Indizierung werden Blockchain-Daten extrahiert, transformiert und in einer durchsuchbaren Datenbank gespeichert, sodass Ihre Anwendung komplexe Abfragen über historische Datensätze hinweg durchführen kann. RPC ist vergleichbar damit, einen Bibliothekar zu bitten, ein bestimmtes Buch zu finden. Die Indizierung ist vergleichbar mit der Erstellung eines Kartenkatalogs für die gesamte Bibliothek. Die meisten Produktionsanwendungen benötigen beides.
Die einfache Erklärung
Jede Blockchain-Anwendung benötigt Daten. Eine Wallet benötigt Kontostände. Ein DeFi-Dashboard benötigt Token-Kurse und den Status von Liquiditätspools. Ein NFT-Marktplatz benötigt Eigentumsnachweise und Transaktionshistorien. Eine Analyseplattform benötigt aggregierte Kennzahlen aus Tausenden von Kontrakten und Millionen von Transaktionen. Die Frage ist, wie man diese Daten aus der Blockchain in die eigene Anwendung überträgt.
RPC-Endpunkte sind die native Schnittstelle der Blockchain. Wenn Ihre Anwendung eine JSON-RPC-Anfrage an einen Knoten sendet, stellt sie eine direkte Frage zum aktuellen oder jüngsten Zustand der Blockchain: Wie hoch ist der aktuelle Kontostand dieser Wallet, was ist bei dieser bestimmten Transaktion geschehen, was enthält Block Nummer 20.000.000? Der Knoten sucht die Antwort heraus und gibt sie zurück. RPC ist bei Punktabfragen unmittelbar, präzise und unkompliziert. Es hat jedoch eine entscheidende Einschränkung: RPC-Methoden sind dafür ausgelegt, bestimmte, bekannte Daten abzurufen, nicht jedoch für Suchvorgänge oder Aggregationen über die gesamte Blockchain hinweg. Es gibt keine RPC-Methode für „Finde alle Transaktionen dieser Wallet in den letzten 30 Tagen“ oder „Zeige mir die 10 Liquiditätspools mit dem höchsten Volumen an“.
Die Indizierung schließt diese Lücke, indem sie auf Basis der Rohdaten der Blockchain eine durchsuchbare Datenbank aufbaut. Ein Indizierer liest jeden Block unmittelbar nach seiner Erstellung, entschlüsselt Transaktionen und Ereignisprotokolle, wandelt die Rohdaten in strukturierte Datensätze um und schreibt diese Datensätze in eine Datenbank mit entsprechenden Indizes. Nach der Indizierung kann Ihre Anwendung die Daten mithilfe von SQL, GraphQL oder jeder anderen von Ihrer Datenbank unterstützten Abfragesprache abfragen. Komplexe Filter, Aggregationen, Sortierungen, Verknüpfungen und Volltextsuche werden dadurch möglich.
Wann sollte RPC verwendet werden?
RPC ist die richtige Wahl, wenn Ihre Anwendung bestimmte, bekannte Daten in Echtzeit lesen oder schreiben muss. Um den aktuellen ETH-Kontostand einer Wallet abzurufen, genügt ein einziger Aufruf von „eth_getBalance“. Das Einreichen einer signierten Transaktion in den Mempool erfordert „eth_sendRawTransaction“. Zum Auslesen des Rückgabewerts der View-Funktion eines Smart Contracts wird „eth_call“ verwendet. Dies sind alles punktuelle Abfragen, bei denen Sie genau wissen, was Sie wollen, und die RPC-Methode kann dies direkt zurückgeben.
RPC ist zudem die einzige Option für Schreibvorgänge. Sie können keine Transaktion über einen Indexer übermitteln. Indexer sind schreibgeschützte Systeme, die Daten erst dann verarbeiten, nachdem diese in der Blockchain festgeschrieben wurden. Wann immer Ihre Anwendung eine Transaktion senden, ein Token genehmigen, mit einem Smart Contract interagieren oder einen zustandsändernden Vorgang übertragen muss, muss dies über einen RPC- endpoint erfolgen.
Die Echtzeit-Zustandsüberprüfung ist eine weitere Stärke von RPC. Wenn ein DeFi-Protokoll vor der Durchführung einer Liquidation die Sicherheitenquote eines Nutzers überprüfen muss oder wenn eine Bridge überprüfen muss, ob eine Einzahlung bestätigt wurde, fragt es den aktuellen Zustand des Knotens über RPC ab. Die Antwort spiegelt den neuesten kanonischen Block wider, wodurch sichergestellt wird, dass die Daten so aktuell wie möglich sind.
Wo RPC an seine Grenzen stößt, sind Abfragen, die das Durchsuchen, Filtern oder Aggregieren von Daten über mehrere Blöcke oder Verträge hinweg erfordern. „Zeige mir alle ERC-20-Transfers, an denen diese Adresse beteiligt ist“ erfordert das Durchlaufen jedes Blocks und das Überprüfen jedes Transaktionsbelegs, was allein über RPC rechnerisch nicht praktikabel ist. „Wie hoch ist das gesamte Handelsvolumen auf Uniswap V3 in den letzten 24 Stunden?“ erfordert das Entschlüsseln und Summieren von Ereignisprotokollen aus Tausenden von Blöcken über Dutzende von Pool-Verträgen hinweg. Dies sind Indizierungsprobleme.
Wann sollte man die Indizierung verwenden?
Die Indizierung ist unverzichtbar, wann immer Ihre Anwendung Blockchain-Daten durchsuchen, filtern, sortieren oder aggregieren muss. Portfolio-Tracker, die den vollständigen Transaktionsverlauf eines Nutzers über mehrere Token und Blockchains hinweg anzeigen, sind auf indizierte Daten angewiesen. Analyse-Dashboards, die Handelsvolumen, TVL-Trends, Gasverbrauchsverläufe und Protokollkennzahlen darstellen, basieren vollständig auf indizierten Datenbanken. Block-Explorer wie Etherscan indizieren die gesamte Blockchain, sodass Nutzer nach beliebigen Adressen, Transaktionen oder Kontrakten suchen können.
Die historische Analyse ist ein weiterer zentraler Anwendungsfall für die Indizierung. Wenn ein Compliance- equipe er den „ flow “ von Geldern über eine Reihe von Wallets hinweg über einen Zeitraum von sechs Monaten nachverfolgen muss, erfordert dies die Abfrage indizierter Transaktionsdaten mit komplexen Verknüpfungen und Filtern. Wenn ein Forschungsunternehmen MEV-Extraktionsmuster über ein Jahr hinweg anhand von „ Ethereum “-Blöcken analysieren möchte, benötigt es einen umfassenden Index aus Transaktionen, Traces und Ereignisprotokollen, wobei die Rechenlast dieser Abfragen von einer Datenbank und nicht von einem Blockchain-Knoten bewältigt wird.
Auch ereignisgesteuerte Architekturen profitieren von der Indizierung. Anstatt RPC-Endpunkte abzufragen, um festzustellen, wann ein bestimmtes Smart-Contract-Ereignis ausgelöst wird, kann ein Indexer kontinuierlich neue Blöcke verarbeiten und passende Ereignisse in Echtzeit an Ihre Anwendung weiterleiten. Dies ist zuverlässiger als WebSocket-Abonnements (bei denen die Verbindung unterbrochen werden und Ereignisse verpasst werden können) und effizienter als HTTP-Polling (bei dem Anfragen für leere Antworten verschwendet werden).
Beides zusammen verwenden
Die meisten Blockchain-Anwendungen im Produktivbetrieb nutzen eine Kombination aus RPC und Indizierung. Die für den Nutzer sichtbaren Lesevorgänge basieren in der Regel auf indizierten Daten: Portfoliowerte, Transaktionsverläufe, Analyse-Dashboards, Suchergebnisse. Wenn der Nutzer eine Aktion ausführt (eine Transaktion senden, Token tauschen, ein NFT prägen), wechselt die Anwendung zu RPC, um die Transaktion an das Netzwerk zu übermitteln und deren Aufnahme zu bestätigen. Nachdem die Transaktion bestätigt wurde, übernimmt der Indexer sie aus dem neuen Block und aktualisiert die Datenbank, was sich anschließend in der Benutzeroberfläche widerspiegelt.
Diese Architektur sorgt für eine klare Trennung der Aufgabenbereiche. RPC übernimmt Echtzeit-Schreibvorgänge und punktuelle Lesevorgänge. Indizierte Datenbanken übernehmen komplexe Lesevorgänge und historische Abfragen. Das Ergebnis ist eine Anwendung, die sich für die Benutzer schnell und reaktionsschnell anfühlt und gleichzeitig hinter den Kulissen anspruchsvolle Datenzugriffsmuster unterstützt.
Was ist der Unterschied zwischen RPC und Indizierung?
Kurz gesagt: Ein RPC- endpoint beantwortet direkte Fragen zum aktuellen oder spezifischen Status, während die Blockchain-Indizierung die Blockchain so aufbereitet, dass sie in einer Datenbank durchsucht und aggregiert werden kann. In der folgenden Tabelle sind die praktischen Unterschiede nebeneinander aufgeführt.
Aspekt | RPC | Indizierung |
|---|---|---|
Zugriffsmuster | Eine Anfrage, eine Antwort | Suchen, filtern und zusammenfassen |
Aktualität der Daten | Echtzeit, aktueller Block | Leichte Verzögerung hinter der Kettenspitze |
Historische Tiefe | Es wird ein Archivknoten benötigt | Gespeichert und sofort abrufbar |
Ist ein Indexer bei historischen Abfragen schneller als RPC?
Bei allem, was sich über viele Blöcke erstreckt, ja. Eine vollständige Historie einer Wallet bei einem RPC-Knoten abzufragen, bedeutet, Block für Block zu durchsuchen, während ein Indexer diese Daten bereits entschlüsselt und gespeichert hat, sodass dieselbe Anfrage mit einer einzigen schnellen Abfrage beantwortet wird. Je weiter die Historie zurückreicht, desto größer ist der Unterschied: Erfahren Sie, warum das Abfragen von Blockchain-Daten schwierig ist und wie Echtzeit- und historische Daten in unterschiedliche Richtungen weisen.
Abfragetyp | Das beste Werkzeug | Warum |
|---|---|---|
Aktueller Stand oder Zustand | RPC | Direkt und in Echtzeit |
Transaktion übermitteln | RPC | Nur RPC kann schreiben |
Transaktionsverlauf der Wallet | Indexierer | Erfordert eine blockübergreifende Suche |
Protokollvolumen oder TVL |
Kann man auf Basis von RPC einen Blockchain-Indexer entwickeln?
Ja, und fast jeder Indexer tut dies. Ein Indexer liest die Blockchain über RPC oder einen Streaming-Feed aus, dekodiert jeden Block und schreibt strukturierte Zeilen in seine eigene Datenbank. Die größten Herausforderungen bestehen darin, Reorgs, Wiederholungsversuche und Lücken zuverlässig zu handhaben. Aus diesem Grund nutzen viele Teams eine verwaltete Blockchain-Daten-Streaming-Pipeline, anstatt RPC-Abfrageschleifen selbst zu programmieren.
Ersetzt die Indizierung RPC?
Nein. Indizierung und RPC sind sich ergänzende Schichten des Web3-Infrastruktur-Stacks. RPC ist nach wie vor die einzige Möglichkeit, Transaktionen zu übermitteln und den aktuellen Status abzurufen, während die Indizierung Suchfunktionen, Verlaufsdaten und Analysen ermöglicht. Produktionsanwendungen leiten Schreibvorgänge und Live-Abfragen an RPC weiter und leiten komplexe Abfragen an einen Index weiter.
Häufig gestellte Fragen
Kann man Transaktionen über einen Indexer übermitteln?
Nein. Indexer sind schreibgeschützte Systeme, die Daten erst verarbeiten, nachdem diese in die Blockchain geschrieben wurden. Jede Transaktion muss über einen RPC- endpoint übermittelt werden.
Warum ist RPC bei Analyseabfragen so langsam?
RPC gibt pro Aufruf einen einzelnen bekannten Datenwert zurück und kann keine Filterung oder Aggregation über die gesamte Kette hinweg vornehmen. Die Beantwortung einer Analysefrage mit RPC erfordert Tausende aufeinanderfolgender Aufrufe und die manuelle Zusammenführung der Ergebnisse, was langsam und aufwendig ist.
Wie aktuell sind die indizierten Daten im Vergleich zu RPC?
Indizierte Daten hinken der Kettenspitze in der Regel um einige Sekunden bis zu einigen Minuten hinterher, je nach Indexer. RPC spiegelt den aktuellsten kanonischen Block wider; für Aktualität im Subsekundenbereich lesen Sie daher weiterhin direkt von einem Knoten.
Benötigen Sie einen Archivknoten für die Indizierung?
Um den Verlauf über einen längeren Zeitraum hinweg zu vervollständigen, benötigen Sie Archivdaten, entweder von einem Archivknoten oder aus einer Backfill-Pipeline. Informationen zum Unterschied zwischen Vollknoten und Archivknoten finden Sie unter „Vollknoten vs. Archivknoten “.
Ist „The Graph“ ein Indexer oder ein RPC-Anbieter?
The Graph ist ein Indizierungsprotokoll. Seine eigenen Indizierer lesen die Blockchain über RPC aus und stellen das verarbeitete Ergebnis als abfragbare Teilgraphen bereit. Es kann weder selbst Transaktionen übermitteln noch Echtzeitdaten im Subsekundenbereich bereitstellen.
Wie „ Quicknode “ beides unterstützt
Quicknode bietet die Infrastruktur für beide Seiten dieser Gleichung. Die Core-API ermöglicht einen global verteilten RPC-Zugriff mit geringer Latenz über mehr als 80 Blockchains hinweg und verarbeitet Echtzeit-Abfragen sowie Transaktionsübermittlungen mit einer Verfügbarkeit von 99,99 % und Antwortzeiten, die 2,5-mal schneller sind als bei Wettbewerbern. Dank optimierter API-Methoden wird die Anzahl der einzelnen RPC-Aufrufe reduziert, die für gängige Vorgänge wie das Abrufen von Token-Guthaben oder NFT-Sammlungen erforderlich sind.
Quicknode Streams schließt die Lücke zwischen RPC und Indizierung, indem es eine Push-basierte Datenpipeline bereitstellt, die Rohdaten oder gefilterte Blockchain-Daten direkt an Ihre Datenbank, Ihr Data Warehouse oder Ihren Webhook übermittelt. Anstatt eine eigene RPC-Polling-Infrastruktur aufzubauen und zu warten, um Ihren Indexer zu versorgen, konfigurieren Sie einen Stream, und „ Quicknode “ übernimmt die Datenextraktion, Filterung, Bereitstellung, Reorg-Korrektur und die Wiederholungslogik. „ Streams “ unterstützt sowohl Echtzeit-Streaming als auch historische Nachvervollständigungen, sodass Sie Ihren Index ab Genesis befüllen und mit einem einzigen Tool auf dem neuesten Stand halten können. Für Teams, die einen eigenen Indexer entwickeln müssen, veröffentlicht „ Quicknode “ eine Schritt-für-Schritt-Anleitung, die zeigt, wie man mithilfe von „ Streams “ einen vollständigen Blockchain-Indexer auf Basis von PostgreSQL erstellt.
Weiterführende Literatur
Leitfaden für effiziente RPC-Anfragen – Quicknode
Entwicklung eines Blockchain-Indexers mit Streams – Quicknode Leitfaden
Erste Schritte mit Streams – Quicknode Dokumentation
Quicknode Core-API