Antworten>Erfahren Sie mehr ĂĽber RPC und APIs>Wie funktionieren RPC-Anfragen?
Wie funktionieren RPC-Anfragen?
// Tags
RPC-AnfragenJSON-RPCBlockchain-API-Aufrufe
TL;DR: Ăśber eine RPC-Anfrage (Remote Procedure Call) kommuniziert Ihre Anwendung mit einem Blockchain-Knoten. Ihre App sendet eine im JSON-Format vorliegende Nachricht an einen RPC- endpoint , in der angegeben wird, welche Methode aufgerufen und welche Parameter ĂĽbergeben werden sollen. Der Knoten verarbeitet die Anfrage, fĂĽhrt die entsprechende Logik anhand des Blockchain-Zustands aus und gibt eine JSON-Antwort mit dem Ergebnis zurĂĽck. Jede ĂśberprĂĽfung des Wallet-Guthabens, jede TransaktionsĂĽbermittlung und jede Interaktion mit Smart Contracts folgt diesem Anfrage-Antwort-Muster.
Die einfache Erklärung
Wenn Sie in einer Krypto-Wallet auf „Senden“ tippen oder Ihren Token-Stand in einem Portfolio-Tracker überprüfen, hat Ihre Anwendung keinen direkten Zugriff auf die Blockchain. Sie muss diese Informationen bei einem Knoten anfordern. Die Sprache, die sie dafür verwendet, heißt JSON-RPC – ein schlankes Protokoll, das Anfragen und Antworten als einfache JSON-Objekte strukturiert.
So funktioniert der Ablauf: Ihre Anwendung erstellt ein Anfrageobjekt mit vier Feldern: der JSON-RPC-Version (immer „2.0“), einem Methodennamen, der dem Knoten mitteilt, welche Operation ausgeführt werden soll, einem Array von Parametern, die den Kontext für diese Operation liefern, und einer eindeutigen ID, damit Ihre App die Antwort der Anfrage zuordnen kann. Dieses Objekt wird als HTTP-POST an die RPC-URL endpoint gesendet. Der Knoten empfängt die Anfrage, sucht die Antwort heraus oder berechnet sie und sendet ein Antwortobjekt zurück, das dieselbe ID sowie entweder ein Ergebnisfeld (bei Erfolg) oder ein Fehlerfeld (falls ein Fehler aufgetreten ist) enthält.
Um beispielsweise den ETH-Kontostand einer Wallet-Adresse zu überprüfen, sendet Ihre Anwendung eine Anfrage mit der Methode „eth_getBalance“ und zwei Parametern: der Wallet-Adresse und „latest“ (was den aktuellsten Block bezeichnet). Der Knoten ruft den aktuellen Status ab, ermittelt den zu dieser Adresse gehörenden Kontostand und gibt ihn als Hexadezimalwert zurück. Ihre Anwendung wandelt diesen Hex-Wert dann in eine für Menschen lesbare Zahl um und zeigt ihn an. Der gesamte Vorgang dauert bei einem leistungsfähigen Anbieter in der Regel einige zehn Millisekunden.
Aufbau gängiger RPC-Methoden
Jede Blockchain definiert eine Reihe von Standard-RPC-Methoden, die Knoten unterstützen müssen. Auf Ethereum und EVM-kompatiblen Blockchains folgen diese Methoden der Namenskonvention „eth_“. Leseoperationen fragen den Zustand der Blockchain ab, ohne ihn zu verändern. „eth_blockNumber“ gibt die aktuelle Blockhöhe zurück. „eth_getBalance“ gibt den Saldo eines Kontos in nativen Token zu einem bestimmten Block zurück. „eth_call“ führt eine Smart-Contract-Funktion im schreibgeschützten Modus aus mode. Auf diese Weise ruft Ihre App Token-Salden, NFT-Metadaten und den Status von DeFi-Protokollen ab, ohne Gas zu verbrauchen.
Schreibvorgänge übermitteln Daten an das Netzwerk, damit diese in einen Block aufgenommen werden. „eth_sendRawTransaction“ sendet eine signierte Transaktion per Broadcast an den Mempool, wo sie von Validatoren zur Aufnahme abgeholt wird. „eth_estimateGas“ simuliert eine Transaktion, um den voraussichtlichen Gasverbrauch zu ermitteln, und hilft Ihrer Anwendung so dabei, vor dem Senden angemessene Gaslimits festzulegen.
Abonnementmethoden ermöglichen die Echtzeitkommunikation über WebSocket-Verbindungen. Anstatt dass Ihre App den Knoten wiederholt mit „eth_blockNumber“ abfragt, um neue Blöcke zu erkennen, kann sie „eth_subscribe“ mit dem Parameter „newHeads“ aufrufen, woraufhin der Knoten jeden neuen Block-Header an Ihre App übermittelt, sobald dieser erzeugt wird. Dies ist weitaus effizienter und latenzärmer als das Abfragen und bildet die Grundlage für Echtzeit-Dapp-Erlebnisse wie Live-Transaktions-Feeds, Ereignis-Listener und sofortige Kontostandsaktualisierungen.
Solana verwendet einen anderen Satz von Methoden, die für sein kontobasiertes Modell optimiert sind. „getBalance“ gibt den SOL-Saldo eines Kontos zurück. „getTransaction“ ruft eine bestätigte Transaktion anhand ihrer Signatur ab. „getAccountInfo“ gibt die in einem Konto gespeicherten Daten zurück, die auf Solana sowohl Token-Guthaben als auch den Programmstatus umfassen. Trotz der unterschiedlichen Methodennamen ist das zugrunde liegende JSON-RPC-Muster identisch: Anfrage mit Methode und Parametern, Antwort mit Ergebnis oder Fehler.
Ein Blick hinter die Kulissen des Anfrage-Lebenszyklus
Wenn Ihre Anwendung eine RPC-Anfrage sendet, durchlaufen mehrere Schritte, bevor Sie eine Antwort erhalten. Zunächst baut der HTTP-Client eine TCP-Verbindung zum endpoint auf und führt einen TLS-Handshake durch, um den Kanal zu verschlüsseln. Anschließend sendet er die JSON-Nutzdaten. Der RPC-Server des Knotens analysiert die Anfrage, überprüft den Methodennamen und die Parameter und leitet sie an den entsprechenden Handler weiter. Der Handler greift entweder auf zwischengespeicherte Daten zurück, fragt die lokale Datenbank des Knotens ab oder führt Berechnungen durch (z. B. den Aufruf eines Smart Contracts in der EVM). Sobald das Ergebnis vorliegt, serialisiert der Knoten es als JSON und sendet es über dieselbe Verbindung zurück.
Jeder dieser Schritte kostet Zeit. DNS-Auflösung, TCP-Handshake, TLS-Aushandlung, Serialisierung der Anfrage, Verarbeitung durch den Knoten, Serialisierung der Antwort und Netzwerkübertragung tragen alle zur Gesamtantwortzeit bei. Aus diesem Grund ist die geografische Nähe zwischen Ihrer Anwendung und dem RPC-Knoten von Bedeutung, verbessern Verbindungspooling und HTTP/2-Multiplexing den Durchsatz und reduziert das Zwischenspeichern häufig angeforderter Daten auf Ihrer Seite unnötige Hin- und Rückläufe.
Batch-Anfragen sind eine Funktion der JSON-RPC-Spezifikation, mit der Sie mehrere Anfragen in einem einzigen HTTP-Aufruf senden können. Anstatt fünf separate Anfragen für fünf verschiedene Wallet-Guthaben zu senden, bündeln Sie alle fünf in einem JSON-Array und senden sie gemeinsam. Der Knoten verarbeitet jede einzelne Anfrage und gibt ein Array mit Antworten zurück. Das Batching reduziert den HTTP-Overhead und kann den Durchsatz verbessern, obwohl jede einzelne Anfrage auf der Knotenseite weiterhin die gleichen Verarbeitungsressourcen beansprucht.
Fehlerbehandlung und bewährte Vorgehensweisen
RPC-Antworten enthalten Standard-Fehlercodes, wenn ein Fehler auftritt. Eine fehlerhaft formatierte Anfrage führt zu einem Parsing-Fehler. Ein ungültiger Methodenname führt zu einem „Method not found“-Fehler. Bei einer Ratenbegrenzung wird in der Regel der HTTP-Status 429 oder ein JSON-RPC-Fehler mit dem Code -32005 zurückgegeben. Das Verständnis dieser Fehlercodes und deren elegante Behandlung in Ihrer Anwendung ist für die Entwicklung zuverlässiger Blockchain-Software von entscheidender Bedeutung.
Eine Wiederholungslogik mit exponentiellem Backoff gilt als bewährte Vorgehensweise bei vorübergehenden Ausfällen. Wenn eine Anfrage aufgrund einer Netzwerkstörung oder eines vorübergehend überlasteten Knotens fehlschlägt, sollte Ihre Anwendung eine kurze Zeit warten und es erneut versuchen, wobei die Wartezeit mit jedem weiteren Versuch verlängert wird. Dadurch wird verhindert, dass Ihre Anwendung einen überlasteten Knoten übermäßig belastet und das Problem dadurch verschlimmert. Ebenso wichtig ist die Festlegung angemessener Timeouts, da eine hängengebliebene Anfrage, die nie abgearbeitet wird, die Ereignisschleife Ihrer Anwendung blockieren kann.
Auch die Wahl der richtigen RPC-Methode für die jeweilige Aufgabe ist wichtig. Ein häufiger Fehler ist der Aufruf von „eth_getBlockByNumber“ mit dem Flag für vollständige Transaktionen auf „true“ gesetzt, obwohl Ihre Anwendung lediglich den Block-Header benötigt. Die Antwort mit vollständigen Transaktionen kann um ein Vielfaches größer sein, wodurch mehr Bandbreite verbraucht wird und die Auswertung länger dauert. Ebenso kann die Verwendung von „eth_getLogs“ mit einem zu großen Blockbereich riesige Datensätze zurückgeben, die sowohl den Knoten als auch Ihre Anwendung überlasten. Es ist gängige Praxis, Log-Abfragen in kleinere Blockbereiche aufzuteilen.
Was ist der Unterschied zwischen HTTP- und WebSocket-RPC-Anfragen?
RPC-Anfragen werden über verschiedene Transportprotokolle übertragen, und die Wahl des richtigen Protokolls hat großen Einfluss auf Latenz und Effizienz. HTTP basiert auf einem Anfrage-Antwort-Modell: Ihre App baut eine Verbindung auf, sendet eine Anfrage, erhält eine Antwort, und der Austausch ist beendet. WebSocket hält eine einzige dauerhafte Verbindung offen, sodass der Knoten Daten an Ihre App weiterleiten kann, sobald diese verfügbar sind. „ gRPC “ bietet ein leistungsstarkes Binärprotokoll für Workloads mit geringer Latenz und hohem Durchsatz.
Verkehr
Am besten geeignet fĂĽr
Verbindung
Echtzeit-Push
HTTP (JSON-RPC)
Einmalige Lese- und Schreibvorgänge
Neu auf Anfrage (poolfähig)
Nein, du musst abfragen
WebSocket
Abonnements und Live-Updates
Eine einzige dauerhafte Verbindung
Ja, der Server überträgt Daten
gRPC
Pipelines mit hohem Durchsatz und geringer Latenz
Persistent, multiplexiert
Ja, Streaming
Wenn Ihre Anwendung nur gelegentliche Lesezugriffe benötigt, ist einfaches HTTP die einfachste Lösung. Wenn Sie Live-Blockchain-Ereignisse benötigen, ist ein WebSocket-Abonnement besser, als den Knoten mit wiederholten Aufrufen zu überlasten. Einen tieferen Einblick in die Verbindungstypen, die ein Knoten bereitstellt, erhalten Sie unter „Was ist ein RPC- endpoint ?“, und Informationen zu den Vor- und Nachteilen von wiederholten Abfragen im Vergleich zum Abonnieren finden Sie unter „Polling vs. Streaming“.
Warum schlagen RPC-Anfragen fehl oder es kommt zu einer ZeitĂĽberschreitung?
Die meisten RPC-Fehler lassen sich in einige wenige Kategorien einteilen. Bei einer Überschreitung Ihres Anfragekontingents wird aufgrund der Ratenbegrenzung ein HTTP-Code 429 oder ein JSON-RPC-Code -32005 zurückgegeben. Warten Sie in diesem Fall eine Weile und versuchen Sie es erneut, anstatt sofort einen erneuten Versuch zu unternehmen. Wenn der Knoten nicht verfügbar ist – beispielsweise weil er neu gestartet wird, synchronisiert wird oder überlastet ist –, wird ein 502- oder 503-Fehler zurückgegeben. Überdimensionierte Abfragen, wie beispielsweise eine eth_getLogs Aufrufe über Millionen von Blöcken hinweg können zu einem Timeout führen, da der Knoten die Antwort nicht rechtzeitig zusammenstellen kann. Verständnis RPC-Ratenbegrenzung und die Zusammenarbeit mit einem zuverlässigen Anbieter Knotenzuverlässigkeit Dank dieser Vorgehensweisen treten solche Ausfälle nur selten auf und lassen sich beheben.
Wie lassen sich RPC-Anfragen beschleunigen?
Die RPC-Latenz setzt sich aus der Netzwerkübertragungszeit und der Verarbeitungszeit am Knoten zusammen – beides lässt sich steuern. Leiten Sie Anfragen an einen Knoten weiter, der sich in geografischer Nähe zu Ihren Nutzern befindet, nutzen Sie Verbindungen durch Pooling und HTTP/2-Multiplexing wieder, fassen Sie zusammengehörige Aufrufe zu einer einzigen Anfrage zusammen und speichern Sie Daten, die sich zwischen den Blöcken nicht ändern, im Cache. Es ist zudem hilfreich, die schlankste Methode für die jeweilige Aufgabe zu wählen: Fordern Sie einen Block-Header anstelle vollständiger Transaktionen an, wenn Sie nur den Header benötigen. Eine vollständige Aufschlüsselung der Faktoren, die Anfragen verlangsamen, finden Sie unter „Was die RPC-Latenz beeinflusst“ – oder verzichten Sie ganz auf die Optimierung, indem Sie die global verteilte „Quicknode “-Core-API nutzen.
Wann sollte man RPC anstelle von Indizierung oder Streaming verwenden?
RPC ist das richtige Werkzeug für Punktabfragen und Schreibvorgänge: das Abrufen eines einzelnen Kontostands, das Auslesen eines Vertragswerts oder das Senden einer Transaktion. Es wird jedoch ineffizient, wenn Sie große historische Datensätze oder aggregierte Ansichten benötigen, da die Rekonstruktion dieser Daten aus rohen RPC-Aufrufen langsam und anforderungsintensiv ist. Für analytische Abfragen ist ein indizierter Datensatz weitaus effizienter, und bei kontinuierlichen Echtzeitdaten entfällt durch Streaming der Overhead durch Anfrage und Antwort vollständig. Siehe „RPC vs. Indizierung“ zur Entscheidung zwischen Live-Aufrufen und vorbereiteten Datensätzen.
Wie „ Quicknode “ RPC-Anfragen optimiert
QuicknodeDie Core-API von Quicknode wurde entwickelt, um jede RPC-Anfrage so schnell und zuverlässig wie möglich zu gestalten. Die weltweit verteilte Infrastruktur der Plattform leitet jede Anfrage an den nächstgelegenen verfügbaren Knoten weiter und minimiert so die Netzwerkübertragungszeit. Mit Antwortzeiten, die im Durchschnitt 2,5-mal schneller sind als die der Konkurrenz, und einer SLA-Verfügbarkeit von 99,99 % stellt sicher, dass die RPC-Aufrufe Ihrer Anwendung unabhängig vom Datenverkehrsaufkommen schnell und konsistent abgewickelt werden.
Über das Standard-JSON-RPC hinaus bietet Quicknode erweiterte API-Methoden, die die Anzahl der von Ihrer Anwendung zu sendenden Anfragen reduzieren. Anstatt mehrere Standardmethoden aufzurufen, um den vollständigen Token-Bestand einer Wallet zu rekonstruieren, kann ein einziger erweiterter API-Aufruf alle Daten in einer einzigen Antwort zurückgeben. Quicknode StreamsQuicknode geht noch einen Schritt weiter, indem es das Anfrage-Antwort-Muster für Echtzeitdaten vollständig eliminiert und Blockchain-Ereignisse direkt an Ihre Anwendung oder Datenbank übermittelt, sobald sie eintreten. Für Entwickler, die ihre RPC-Nutzung optimieren möchten, veröffentlicht einen detaillierten Leitfaden für effiziente RPC-Aufrufe, der Best Practices zu Paginierung, Caching, Fehlerbehandlung und Methodenauswahl behandelt.
Häufig gestellte Fragen
WofĂĽr steht die AbkĂĽrzung RPC in der Blockchain?
RPC steht für „Remote Procedure Call“. Dabei handelt es sich um ein Muster, bei dem Ihre Anwendung eine Funktion aufruft, die auf einem entfernten Rechner – in diesem Fall einem Blockchain-Knoten – ausgeführt wird, so als würde sie eine lokale Funktion aufrufen. Der Knoten führt die Prozedur anhand des Zustands der Blockchain aus und gibt das Ergebnis zurück.
Was ist JSON-RPC?
JSON-RPC ist das schlanke Protokoll, das die meisten Blockchains für RPC verwenden. Anfragen und Antworten sind einfache JSON-Objekte. Eine Anfrage enthält den Namen einer Methode und deren Parameter, und die Antwort enthält entweder ein Ergebnis oder eine Fehlermeldung, die über eine gemeinsame ID der Anfrage zugeordnet werden.
Ist eine RPC-Anfrage dasselbe wie ein API-Aufruf?
Es handelt sich um eine spezielle Art von API-Aufruf. Eine allgemeine REST-API stellt Ressourcen unter verschiedenen URLs bereit, während eine Blockchain-RPC-API Methoden unter einer einzigen URL endpoint bereitstellt und die Operation anhand des Methodennamens im Request-Body auswählt. Das Prinzip des Hin- und Rücklaufs von Anfrage und Antwort ist dabei dasselbe.
Wie lange dauert eine RPC-Anfrage?
Ein einfacher Lesevorgang von einem nahegelegenen, gut ausgestatteten Knoten dauert in der Regel nur einige zehn Millisekunden. Aufwändigere Aufrufe, wie beispielsweise umfangreiche Protokollabfragen oder das Abrufen ganzer Blöcke, dauern länger, da der Knoten vor der Antwort mehr Daten zusammenstellen und serialisieren muss.
Was ist der Unterschied zwischen einem RPC-Knoten und einem RPC- endpoint?
Ein RPC-Knoten ist der laufende Server, der Blockchain-Daten speichert und Anfragen ausfĂĽhrt. Ein RPC- endpoint ist die URL, an die Ihre Anwendung Anfragen sendet und die diese an einen oder mehrere dahinterliegende Knoten weiterleitet. Erfahren Sie mehr darĂĽber, was ein Blockchain-Knoten ist, um die zugrunde liegende Infrastruktur zu verstehen.