Glossaire / Référence pour développeurs
Paramètre R
- Qu'est-ce que le paramètre R ?
- Le paramètre R est l'ajout du BIP72 à un URI bitcoin qui remplace l'adresse de paiement par une URL depuis laquelle votre portefeuille est censé récupérer une demande signée.
Spécifié dans BIP-72.
Scanner un QR code portant un paramètre r indique à votre portefeuille de récupérer une page web avant de vous montrer quoi que ce soit. Le BIP72 est arrivé le 29 juillet 2013 et utilisait un simple r plutôt que l'écriture req-r réservée aux clés obligatoires, afin que les portefeuilles plus anciens puissent l'ignorer et payer l'adresse à la place. Aucune page de paiement que vous rencontrez aujourd'hui ne vous en remettra un.
Comment cela fonctionne
Le paramètre r est une clé de requête contenant une URL HTTPS encodée en pourcentage, et le BIP72 en a défini deux formes. La forme compatible conserve une adresse normale dans l'URI et ajoute la clé après elle, si bien qu'un portefeuille qui n'a jamais entendu parler du protocole de paiement paie l'adresse tandis qu'un portefeuille qui comprend r ignore l'adresse et récupère la demande. La forme dépouillée supprime entièrement l'adresse, donnant quelque chose comme bitcoin:?r=https://store.example/i/8f3a, que les logiciels plus anciens ne peuvent pas payer du tout.
Rendre la clé facultative était une lecture délibérée du BIP21, dont la grammaire répartit les paramètres non reconnus en deux classes : tout ce qui est préfixé par req- doit amener un portefeuille à refuser l'URI, tout le reste peut être ignoré. Nommer le champ r plutôt que req-r choisissait donc une dégradation progressive. Le BIP72 a aussi explicitement prévu le comportement inverse, afin qu'un marchand qui ne pouvait véritablement pas accepter un paiement à une adresse nue puisse écrire req-r et forcer les portefeuilles incompatibles à s'arrêter plutôt qu'à envoyer des fonds que le paiement ne pourrait pas rapprocher.
Ce qui revenait de l'URL était un protocol buffer servi sous le type MIME que le BIP71 lui a enregistré. Le BIP73 a ensuite ajouté la négociation de contenu, permettant au même lien de renvoyer une demande de paiement à un portefeuille et une page web humaine ordinaire à un navigateur, distinguées par l'en-tête Accept envoyé par le client.
Où le voit-on
Le paramètre r n'apparaît nulle part dans l'usage actuel. Bitcoin Core a cessé de suivre ces URL lorsque la version 0.20.0 a supprimé la prise en charge du protocole de paiement, et les outils marchands qui les généraient autrefois ont été remplacés par des logiciels émettant de simples URI BIP21 et des factures Lightning. Une page de paiement qui produit encore un paramètre r exécute une intégration que personne n'a touchée depuis des années, et payer par une autre voie est la réponse raisonnable.
L'habitude que ce champ doit vous laisser survit au champ lui-même. Un QR code est illisible pour un humain, donc le scanner est un acte de confiance envers ce qui l'a produit : un écran, une facture imprimée, un autocollant collé sur une machine. Le paramètre r rendait cela littéral en remettant à votre portefeuille une URL à contacter, ce qui exposait aussi votre adresse IP au serveur du marchand avant que vous n'acceptiez quoi que ce soit. La même exposition existe sous une forme plus banale avec un QR code d'adresse ordinaire que quelqu'un a discrètement remplacé. Confirmez la destination sur un affichage que le scanner ne contrôle pas, ce qui sur un portefeuille matériel signifie l'écran de l'appareil lui-même, et comparez assez de caractères pour être sûr plutôt que de jeter un coup d'œil aux quatre premiers.
Paramètre R vs URI bitcoin
Un URI bitcoin est la chaîne entière ; le paramètre r était une clé facultative à l'intérieur de celle-ci. Ce qui les sépare est la direction de l'autorité. Des clés comme amount, label et message décorent une destination qui figure déjà dans l'URI, et un portefeuille peut les ignorer toutes et envoyer quand même les fonds au bon endroit. Le paramètre r inversait cette relation : partout où il était compris, il remplaçait complètement l'adresse, déplaçant la décision sur la destination des fonds de la chaîne devant vous vers un serveur situé ailleurs.