Glossaire / Nœuds et logiciels
RPC
Aussi appelé JSON-RPC, appel de procédure distante.
- Qu'est-ce que RPC ?
- RPC est l'interface de commande qu'un nœud bitcoin expose à d'autres programmes, permettant à un portefeuille, au back-end d'une plateforme d'échange ou à votre propre terminal de lui poser des questions et de lui donner des instructions.
Tout ce qui automatise bitcoin parle à un nœud de cette manière. Bitcoin Core écoute sur le port 8332 les requêtes HTTP contenant du JSON, répond à un appel à la fois et, par défaut, n'accepte les connexions que depuis la machine sur laquelle il fonctionne. Si un service vous a déjà donné une estimation de frais ou confirmé un retrait, c'est un appel RPC qui a produit cette réponse.
Comment cela fonctionne
Un appel RPC est un POST HTTP dont le corps nomme une méthode et énumère ses arguments.
Demandez getblockchaininfo et vous recevez le nom de la chaîne, la hauteur actuelle, la progression de la vérification et la taille sur disque. Demandez listunspent ou sendtoaddress et vous pilotez le portefeuille du nœud. Demandez getrawtransaction et vous obtenez des octets. Le programme bitcoin-cli fourni est une fine enveloppe qui construit le JSON, l'envoie en POST et affiche la réponse, si bien que tout ce que vous pouvez taper en ligne de commande, un programme peut le faire via une socket.
L'authentification a une histoire qu'il vaut la peine de connaître. Bitcoin Core a abandonné sa prise en charge intégrée de SSL dans la version 0.12.0, si bien que l'interface parle HTTP non chiffré et rien d'autre. Cette même version a introduit le fichier cookie, un identifiant aléatoire écrit dans le répertoire de données au démarrage et remplacé à chaque redémarrage, ce qui explique que bitcoin-cli fonctionne sur votre propre machine sans que vous ayez jamais à définir un mot de passe. Pour les appelants distants, il existe rpcauth, qui stocke un hachage salé dans le fichier de configuration plutôt qu'un secret en clair. Il n'y a toujours aucun chiffrement du transport, donc joindre un nœud à travers un réseau suppose un tunnel SSH, un VPN ou un service caché Tor, et rien d'autre ne fera l'affaire.
Chaque réseau dispose de son propre port pour que plusieurs démons partagent une même machine : 8332 sur le mainnet, 18332 sur le testnet3, 48332 sur le testnet4, 38332 sur le signet et 18443 sur le regtest. Le port RPC du mainnet se situe juste en dessous du port pair-à-pair 8333, et confondre les deux est une erreur de débutant courante.
Le dialecte a évolué lentement. Bitcoin Core a répondu à une variante souple de JSON-RPC 1,0 pendant bien plus d'une décennie, puis la version 28.0 a appris au serveur à reconnaître les requêtes JSON-RPC 2,0 et à répondre en stricte conformité avec cette spécification tout en acceptant encore l'ancien style. Les appels propres au portefeuille sont adressés par chemin, si bien qu'un nœud contenant plusieurs portefeuilles les achemine via /wallet/ suivi du nom du portefeuille.
Où cela se voit
RPC est la jointure entre bitcoin lui-même et chaque produit construit par-dessus.
Une implémentation Lightning demande des blocs à un nœud et pousse des transactions de clôture à travers lui. Les explorateurs de blocs, les tableaux de bord de la mempool et les processeurs de paiement comme BTCPay Server reposent sur une instance bitcoind et l'enveloppent dans quelque chose de plus convivial. Le système de retrait d'une plateforme d'échange est, au bas de la pile, une file d'appels sendrawtransaction. Quand nos avis sur les plateformes d'échange signalent qu'une plateforme regroupe les retraits, ce regroupement se fait dans du code qui aboutit ici.
C'est aussi là que les installations auto-hébergées se font compromettre. Le port 8332 est scanné en permanence, et un nœud exposé à l'internet ouvert avec un mot de passe devinable et un portefeuille chargé est un portefeuille qui sera vidé. Gardez l'interface liée à la machine locale, et passez par un tunnel si vous en avez besoin depuis ailleurs.
RPC vs ordre des octets RPC
RPC et ordre des octets RPC partagent un acronyme et rien d'autre, ce qui cause de vrais bugs. RPC est l'interface. L'ordre des octets RPC est une convention d'affichage : les hachages de blocs et de transactions sont calculés et transmis dans un sens et affichés par la couche RPC dans le sens inverse, ce qui explique qu'un txid copié depuis un explorateur de blocs se lit à l'envers par rapport aux mêmes 32 octets présents dans une transaction brute. Introduisez un txid copié directement dans un analyseur au niveau des octets sans l'inverser et la recherche ne correspondra tout simplement jamais.