đ€ NOUVEAU : « Quicknode » : un guide pratique sur l'IA 10 recettes Ă©prouvĂ©es pour le codage en IA agents.
Voir les recettes     Fonctionnement des requĂȘtes RPC : guide sur les nĆuds de blockchain | QuicknodeCertifiĂ© SOC 2 Type II · ISO 27001
RPC et API>Comment fonctionnent les requĂȘtes RPC ? RĂ©ponses>En savoir plus sur les RPC et les API>Comment fonctionnent les requĂȘtes RPC ? Comment fonctionnent les requĂȘtes RPC ?
// Tags
RequĂȘtes RPCJSON-RPCAppels d'API blockchain
En bref : une requĂȘte RPC (Remote Procedure Call, ou « appel de procĂ©dure Ă distance ») permet Ă votre application de communiquer avec un nĆud de blockchain. Votre application envoie un message au format JSON Ă une interface RPC endpoint , en prĂ©cisant la mĂ©thode Ă appeler et les paramĂštres Ă inclure. Le nĆud traite la requĂȘte, exĂ©cute la logique correspondante en fonction de l'Ă©tat de la blockchain, puis renvoie une rĂ©ponse au format JSON contenant le rĂ©sultat. Chaque vĂ©rification de solde de portefeuille, chaque soumission de transaction et chaque interaction avec un contrat intelligent suit ce modĂšle requĂȘte-rĂ©ponse.
L'explication simple
Lorsque vous appuyez sur « Envoyer » dans un portefeuille de cryptomonnaies ou que vous consultez le solde de vos tokens sur un outil de suivi de portefeuille, votre application n'a pas directement accĂšs Ă la blockchain. Elle doit demander ces informations Ă un nĆud. Le langage qu'elle utilise pour effectuer cette requĂȘte s'appelle JSON-RPC, un protocole lĂ©ger qui structure les requĂȘtes et les rĂ©ponses sous forme de simples objets JSON.
Voici comment fonctionne la communication. Votre application crĂ©e un objet de requĂȘte comportant quatre champs : la version JSON-RPC (toujours « 2.0 »), un nom de mĂ©thode qui indique au nĆud lâopĂ©ration Ă effectuer, un tableau de paramĂštres fournissant le contexte de cette opĂ©ration, et un identifiant unique permettant Ă votre application de faire correspondre la rĂ©ponse Ă la requĂȘte. Elle envoie cet objet via une requĂȘte HTTP POST Ă lâURL RPC endpoint . Le nĆud reçoit la requĂȘte, recherche ou calcule la rĂ©ponse, puis renvoie un objet de rĂ©ponse contenant le mĂȘme identifiant ainsi quâun champ « result » (en cas de succĂšs) ou un champ « error » (en cas dâĂ©chec).
Par exemple, pour vĂ©rifier le solde en ETH dâune adresse de portefeuille, votre application envoie une requĂȘte avec la mĂ©thode « eth_getBalance » et deux paramĂštres : lâadresse du portefeuille et « latest » (qui dĂ©signe le bloc le plus rĂ©cent). Le nĆud interroge lâĂ©tat actuel, trouve le solde associĂ© Ă cette adresse et le renvoie sous forme de valeur hexadĂ©cimale. Votre application convertit ensuite cette valeur hexadĂ©cimale en un nombre lisible par l'utilisateur et l'affiche. L'ensemble de l'Ă©change prend gĂ©nĂ©ralement quelques dizaines de millisecondes avec un fournisseur performant.
Anatomie des méthodes RPC courantes
Chaque blockchain dĂ©finit un ensemble de mĂ©thodes RPC standard que les nĆuds doivent prendre en charge. Sur Ethereum et les chaĂźnes compatibles EVM, ces mĂ©thodes respectent la convention d'espace de noms « eth_ ». Les opĂ©rations de lecture interrogent l'Ă©tat de la blockchain sans le modifier. « eth_blockNumber » renvoie la hauteur du dernier bloc. « eth_getBalance » renvoie le solde en jetons natifs d'un compte Ă un bloc donnĂ©. « eth_call » exĂ©cute une fonction de contrat intelligent en mode lecture seule mode, ce qui permet Ă votre application de rĂ©cupĂ©rer les soldes de jetons, les mĂ©tadonnĂ©es des NFT et les Ă©tats des protocoles DeFi sans dĂ©penser de gaz.
Les opĂ©rations d'Ă©criture envoient des donnĂ©es au rĂ©seau afin qu'elles soient intĂ©grĂ©es Ă un bloc. La fonction « eth_sendRawTransaction » diffuse une transaction signĂ©e vers le mempool, oĂč les validateurs la rĂ©cupĂšrent pour l'intĂ©grer. La fonction « eth_estimateGas » simule une transaction afin d'estimer la quantitĂ© de gaz qu'elle consommera, ce qui aide votre application Ă dĂ©finir des limites de gaz appropriĂ©es avant l'envoi.
Les mĂ©thodes d'abonnement permettent une communication en temps rĂ©el via des connexions WebSocket. Au lieu que votre application interroge sans cesse le nĆud avec « eth_blockNumber » pour dĂ©tecter de nouveaux blocs, elle peut appeler « eth_subscribe » avec le paramĂštre « newHeads » : le nĆud transmettra alors Ă votre application chaque nouvel en-tĂȘte de bloc dĂšs sa crĂ©ation. Cette mĂ©thode est bien plus efficace et prĂ©sente une latence bien moindre que l'interrogation, et elle constitue la base des expĂ©riences d'applications dĂ©centralisĂ©es (dapps) en temps rĂ©el, telles que les flux de transactions en direct, les Ă©couteurs d'Ă©vĂ©nements et les mises Ă jour instantanĂ©es du solde.
Solana utilise un ensemble diffĂ©rent de mĂ©thodes optimisĂ©es pour son modĂšle basĂ© sur les comptes. « getBalance » renvoie le solde en SOL d'un compte. « getTransaction » rĂ©cupĂšre une transaction confirmĂ©e Ă partir de sa signature. « getAccountInfo » renvoie les donnĂ©es stockĂ©es dans un compte, qui, sur Solana , comprennent Ă la fois les soldes des jetons et l'Ă©tat du programme. MalgrĂ© les noms de mĂ©thodes diffĂ©rents, le modĂšle JSON-RPC sous-jacent est identique : requĂȘte avec mĂ©thode et paramĂštres, rĂ©ponse avec rĂ©sultat ou erreur.
Le cycle de vie des requĂȘtes : les coulisses
Lorsque votre application envoie une requĂȘte RPC, plusieurs Ă©tapes se succĂšdent avant que vous ne receviez une rĂ©ponse. Tout dâabord, le client HTTP Ă©tablit une connexion TCP avec lâ endpoint , puis effectue une poignĂ©e de main TLS afin de chiffrer le canal. Il envoie ensuite la charge utile au format JSON. Le serveur RPC du nĆud analyse la requĂȘte, valide le nom de la mĂ©thode et les paramĂštres, puis la transmet au gestionnaire appropriĂ©. Ce dernier consulte les donnĂ©es mises en cache, interroge la base de donnĂ©es locale du nĆud ou effectue des calculs (comme lâexĂ©cution dâun appel de contrat intelligent dans lâEVM). Une fois le rĂ©sultat prĂȘt, le nĆud le sĂ©rialise au format JSON et le renvoie via la mĂȘme connexion.
Chacune de ces Ă©tapes allonge le temps de rĂ©ponse. La rĂ©solution DNS, la poignĂ©e de main TCP, la nĂ©gociation TLS, la sĂ©rialisation de la requĂȘte, le traitement par le nĆud, la sĂ©rialisation de la rĂ©ponse et le transit rĂ©seau contribuent tous au temps de rĂ©ponse total. C'est pourquoi la proximitĂ© gĂ©ographique entre votre application et le nĆud RPC est importante, pourquoi la mise en pool des connexions et le multiplexage HTTP/2 amĂ©liorent le dĂ©bit, et pourquoi la mise en cache des donnĂ©es frĂ©quemment demandĂ©es de votre cĂŽtĂ© rĂ©duit les allers-retours inutiles.
Les requĂȘtes groupĂ©es sont une fonctionnalitĂ© de la spĂ©cification JSON-RPC qui permet d'envoyer plusieurs requĂȘtes en un seul appel HTTP. Au lieu d'envoyer cinq requĂȘtes distinctes pour obtenir les soldes de cinq portefeuilles diffĂ©rents, vous regroupez les cinq dans un tableau JSON et vous les envoyez ensemble. Le nĆud traite chacune d'entre elles et renvoie un tableau de rĂ©ponses. Le regroupement rĂ©duit la surcharge HTTP et peut amĂ©liorer le dĂ©bit, mĂȘme si chaque requĂȘte individuelle continue de consommer les mĂȘmes ressources de traitement cĂŽtĂ© nĆud.
Gestion des erreurs et bonnes pratiques
Les rĂ©ponses RPC incluent des codes d'erreur standard lorsqu'un problĂšme survient. Une requĂȘte mal formĂ©e renvoie une erreur d'analyse. Un nom de mĂ©thode invalide renvoie une erreur « mĂ©thode introuvable ». La limitation de dĂ©bit renvoie gĂ©nĂ©ralement un statut HTTP 429 ou une erreur JSON-RPC avec le code -32005. Il est essentiel de comprendre ces codes d'erreur et de les gĂ©rer de maniĂšre appropriĂ©e dans votre application pour dĂ©velopper un logiciel blockchain fiable.
La logique de rĂ©essai avec dĂ©lai d'attente exponentiel est une bonne pratique en cas de dĂ©faillances transitoires. Si une requĂȘte Ă©choue en raison d'un incident rĂ©seau ou d'un nĆud temporairement surchargĂ©, votre application doit patienter un court instant puis rĂ©essayer, en augmentant le temps d'attente Ă chaque nouvelle tentative. Cela Ă©vite que votre application ne sollicite excessivement un nĆud en difficultĂ© et n'aggrave le problĂšme. Il est tout aussi important de dĂ©finir des dĂ©lais d'expiration raisonnables, car une requĂȘte bloquĂ©e qui ne se rĂ©sout jamais peut bloquer la boucle d'Ă©vĂ©nements de votre application.
Le choix de la mĂ©thode RPC adaptĂ©e Ă la tĂąche est Ă©galement important. Une erreur courante consiste Ă appeler « eth_getBlockByNumber » avec le drapeau « full transactions » activĂ© alors que votre application n'a besoin que de l'en-tĂȘte du bloc. La rĂ©ponse contenant l'intĂ©gralitĂ© des transactions peut ĂȘtre plusieurs ordres de grandeur plus volumineuse, ce qui consomme davantage de bande passante et prend plus de temps Ă analyser. De mĂȘme, l'utilisation de « eth_getLogs » avec une plage de blocs trop large peut renvoyer des ensembles de donnĂ©es massifs qui surchargent Ă la fois le nĆud et votre application. Il est courant de paginer les requĂȘtes de journaux en plages de blocs plus petites.
Quelle est la diffĂ©rence entre les requĂȘtes RPC HTTP et WebSocket ?
Les requĂȘtes RPC transitent par plusieurs protocoles de transport diffĂ©rents, et le choix du protocole appropriĂ© a un impact considĂ©rable sur la latence et l'efficacitĂ©. HTTP est un modĂšle requĂȘte-rĂ©ponse : votre application ouvre une connexion, envoie une requĂȘte, reçoit une rĂ©ponse, puis l'Ă©change prend fin. WebSocket maintient une connexion persistante unique ouverte, ce qui permet au nĆud d'envoyer des donnĂ©es Ă votre application dĂšs qu'elles sont disponibles. Le protocole « gRPC » ajoute un protocole binaire hautement performant pour les charges de travail nĂ©cessitant une faible latence et un dĂ©bit Ă©levĂ©.
Transports | Idéal pour | Connexion | Notification en temps réel |
|---|
HTTP (JSON-RPC) | Lectures et écritures ponctuelles | Nouveau sur demande (mutable) | Non, vous devez effectuer une interrogation |
WebSocket | Abonnements et mises à jour en direct | Connexion unique persistante | Oui, le serveur transmet les données |
gRPC | Pipelines à haut débit et à faible latence | Persistant, multiplexé | Oui, en streaming |
Si votre application ne nĂ©cessite que des lectures occasionnelles, le protocole HTTP standard est la solution la plus simple. Si vous avez besoin d'Ă©vĂ©nements en temps rĂ©el issus de la blockchain, un abonnement WebSocket est prĂ©fĂ©rable Ă un bombardement du nĆud par des appels rĂ©pĂ©tĂ©s. Pour en savoir plus sur les types de connexion proposĂ©s par un nĆud, dĂ©couvrez ce qu'est une « endpoint » RPC; quant aux compromis entre les vĂ©rifications rĂ©pĂ©tĂ©es et l'abonnement, consultez la section « polling vs streaming ».
Pourquoi les requĂȘtes RPC Ă©chouent-elles ou aboutissent-elles Ă un dĂ©lai d'expiration ?
La plupart des Ă©checs RPC relĂšvent de quelques catĂ©gories bien prĂ©cises. La limitation du dĂ©bit renvoie un code HTTP 429 ou un code JSON-RPC -32005 lorsque vous dĂ©passez votre quota de requĂȘtes ; il est donc prĂ©fĂ©rable dâattendre un certain temps avant de rĂ©essayer plutĂŽt que de relancer immĂ©diatement la requĂȘte. LâindisponibilitĂ© dâun nĆud renvoie un code 502 ou 503 lorsque le nĆud est en cours de redĂ©marrage, de synchronisation ou de surcharge. Les requĂȘtes trop volumineuses, telles quâune eth_getLogs Les appels portant sur des millions de blocs peuvent aboutir Ă un dĂ©lai d'expiration, car le nĆud ne parvient pas Ă assembler la rĂ©ponse Ă temps. Comprendre Limitation du dĂ©bit RPC et associer votre fournisseur Ă des fiabilitĂ© des nĆuds Ces pratiques permettent de limiter ces dĂ©faillances et de les rĂ©soudre facilement.
Comment accĂ©lĂ©rer les requĂȘtes RPC ?
La latence RPC correspond Ă la somme du temps de transit rĂ©seau et du temps de traitement par les nĆuds, deux facteurs qui peuvent ĂȘtre contrĂŽlĂ©s. Acheminez les requĂȘtes vers un nĆud gĂ©ographiquement proche de vos utilisateurs, rĂ©utilisez les connexions grĂące au pooling et au multiplexage HTTP/2, regroupez les appels connexes en une seule requĂȘte et mettez en cache les donnĂ©es qui ne changent pas dâun bloc Ă lâautre. Il est Ă©galement utile de choisir la mĂ©thode la plus lĂ©gĂšre pour la tĂąche : demandez un en-tĂȘte de bloc plutĂŽt que des transactions complĂštes lorsque vous n'avez besoin que de l'en-tĂȘte. Pour une analyse dĂ©taillĂ©e des facteurs ralentissant les requĂȘtes, consultez la section « Facteurs influençant la latence RPC », ou Ă©vitez complĂštement l'optimisation en utilisant l'API Core d'Quicknode , distribuĂ©e Ă l'Ă©chelle mondiale.
Dans quels cas faut-il privilégier le RPC plutÎt que l'indexation ou le streaming ?
Le RPC est l'outil idĂ©al pour les requĂȘtes ponctuelles et les Ă©critures : rĂ©cupĂ©rer un solde unique, lire la valeur d'un contrat ou diffuser une transaction. Il s'avĂšre toutefois inefficace lorsque vous avez besoin de grands ensembles de donnĂ©es historiques ou de vues agrĂ©gĂ©es, car la reconstruction de ces donnĂ©es Ă partir d'appels RPC bruts est lente et gĂ©nĂšre un nombre important de requĂȘtes. Pour les requĂȘtes analytiques, un ensemble de donnĂ©es indexĂ© est bien plus efficace, et pour les donnĂ©es continues en temps rĂ©el, le streaming Ă©limine entiĂšrement la surcharge liĂ©e aux Ă©changes requĂȘte-rĂ©ponse. Consultez la section « RPC vs indexation » pour choisir entre les appels en direct et les ensembles de donnĂ©es prĂ©parĂ©s.
Comment « Quicknode » optimise les requĂȘtes RPC
QuicknodeL'API principale d'Quicknode est conçue pour rendre chaque requĂȘte RPC aussi rapide et fiable que possible. L'infrastructure mondialement distribuĂ©e de la plateforme achemine chaque requĂȘte vers le nĆud disponible le plus proche, rĂ©duisant ainsi au minimum le temps de transit sur le rĂ©seau. Avec des temps de rĂ©ponse en moyenne 2,5 fois plus rapides que ceux de la concurrence et un SLA garantissant une disponibilitĂ© de 99,99 %, assure que les appels RPC de votre application sont traitĂ©s rapidement et de maniĂšre constante, quel que soit le volume de trafic.
Au-delĂ du JSON-RPC standard, Quicknode propose des mĂ©thodes API amĂ©liorĂ©es qui rĂ©duisent le nombre de requĂȘtes que votre application doit effectuer. Au lieu dâappeler plusieurs mĂ©thodes standard pour reconstituer lâensemble des jetons dĂ©tenus par un portefeuille, un seul appel Ă lâAPI amĂ©liorĂ©e peut renvoyer toutes les donnĂ©es en une seule rĂ©ponse. Quicknode StreamsQuicknode va encore plus loin en Ă©liminant complĂštement le modĂšle requĂȘte-rĂ©ponse pour les donnĂ©es en temps rĂ©el, en transmettant les Ă©vĂ©nements de la blockchain directement Ă votre application ou Ă votre base de donnĂ©es au fur et Ă mesure quâils se produisent. Pour les dĂ©veloppeurs souhaitant optimiser leur utilisation du RPC, publie un guide dĂ©taillĂ© sur les appels RPC efficaces, couvrant la pagination, la mise en cache, la gestion des erreurs et les meilleures pratiques en matiĂšre de sĂ©lection de mĂ©thodes.
Foire aux questions
Que signifie l'acronyme « RPC » dans le domaine de la blockchain ?
RPC signifie « Remote Procedure Call » (appel de procĂ©dure Ă distance). Il s'agit d'un modĂšle dans lequel votre application appelle une fonction s'exĂ©cutant sur une machine distante, en l'occurrence un nĆud de blockchain, comme si elle appelait une fonction locale. Le nĆud exĂ©cute la procĂ©dure en fonction de l'Ă©tat de la chaĂźne et renvoie le rĂ©sultat.
Qu'est-ce que le JSON-RPC ?
JSON-RPC est le protocole lĂ©ger utilisĂ© par la plupart des blockchains pour les appels RPC. Les requĂȘtes et les rĂ©ponses sont des objets JSON simples. Une requĂȘte spĂ©cifie une mĂ©thode et ses paramĂštres, tandis que la rĂ©ponse contient soit un rĂ©sultat, soit une erreur, et est associĂ©e Ă la requĂȘte grĂące Ă un identifiant commun.
Une requĂȘte RPC, c'est la mĂȘme chose qu'un appel d'API ?
Il s'agit d'un type particulier d'appel d'API. Une API REST classique expose des ressources sous diffĂ©rentes URL, tandis qu'une API RPC de blockchain expose des mĂ©thodes Ă une seule URL endpoint et sĂ©lectionne l'opĂ©ration via le nom de la mĂ©thode dans le corps de la requĂȘte. Le principe de l'Ă©change requĂȘte-rĂ©ponse reste toutefois le mĂȘme.
Combien de temps dure une requĂȘte RPC ?
Une simple lecture sur un nĆud proche et bien approvisionnĂ© s'effectue gĂ©nĂ©ralement en quelques dizaines de millisecondes. Les appels plus lourds, tels que les requĂȘtes de journaux Ă grande Ă©chelle ou les rĂ©cupĂ©rations de blocs complets, prennent plus de temps, car le nĆud doit rassembler et sĂ©rialiser davantage de donnĂ©es avant de rĂ©pondre.
Quelle est la diffĂ©rence entre un nĆud RPC et un « endpoint » RPC ?
Un nĆud RPC est le serveur en cours d'exĂ©cution qui stocke les donnĂ©es de la blockchain et traite les requĂȘtes. Une endpoint RPC est l'URL Ă laquelle votre application envoie ses requĂȘtes ; celle-ci les achemine vers un ou plusieurs nĆuds situĂ©s en arriĂšre-plan. DĂ©couvrez ce qu'est un nĆud de blockchain pour en savoir plus sur l'infrastructure sous-jacente.
Pour en savoir plus