Glossaire / Référence pour développeurs
URI Bitcoin
Aussi appelé BIP21.
- Qu'est-ce qu'un URI Bitcoin ?
- Un URI Bitcoin regroupe les détails d'un paiement dans une seule chaîne cliquable qui commence par bitcoin : et peut contenir une adresse, un montant et un libellé.
Spécifié dans BIP-21.
Un URI Bitcoin est un lien : en cliquant dessus, votre portefeuille s'ouvre avec le paiement déjà rempli. Le BIP21 a fixé le format le 29 janvier 2012 : le schéma bitcoin:, une adresse, puis des paramètres facultatifs après un point d'interrogation. Recevoir un URI plutôt qu'une adresse seule retire le montant de la liste des éléments que vous devez recopier correctement.
Comment cela fonctionne
La grammaire du BIP21 est volontairement réduite, et c'est la principale raison pour laquelle le format est resté inchangé pendant plus de dix ans.
Un URI complet se lit bitcoin:bc1q...w5mdq?amount=0.00042&label=Coffee%20Shop&message=Order%20118. Tout ce qui se trouve entre les deux-points et le point d'interrogation est l'adresse de destination. Tout ce qui suit est un ensemble de paires name=value reliées par des esperluettes, et le BIP21 n'en définit que trois :
amountest un nombre décimal de bitcoin, jamais de satoshis, écrit avec un point et sans virgule ni symbole monétaire.amount=0.01signifie un centième de bitcoin, soit 1 000 000 satoshis.labelnomme la partie payée, par exemple un commerce ou une personne.messageindique l'objet du paiement.
Les deux champs texte sont encodés en pourcentage en UTF-8, donc un espace devient %20 et une esperluette à l'intérieur d'un libellé devient %26.
Deux règles rendent le format extensible. Les paramètres inconnus sont ignorés, ce qui permet à un ancien portefeuille de lire un URI nouveau sans blocage. Les paramètres préfixés par req- font exception : un portefeuille qui n'en comprend pas un doit rejeter l'URI entier plutôt que de deviner ce qu'il était censé faire. Cette seule règle constitue tout le mécanisme de mise à niveau, et elle a absorbé depuis toutes les extensions sans casser les logiciels plus anciens.
Ces extensions sont désormais l'endroit où le format vit réellement :
r=, ajouté par le BIP72, pointait vers une demande de paiement BIP70. Cette voie est morte.pj=, issu du BIP78, nomme un point d'accès PayJoin pour que le payeur et le bénéficiaire construisent ensemble une transaction collaborative.lightning=transporte une facture BOLT11 aux côtés de l'adresse on-chain. Les portefeuilles qui le comprennent paient via Lightning, ceux qui ne le comprennent pas se rabattent sur l'adresse, et les pages de paiement des commerçants impriment le résultat sous la forme d'un seul QR code unifié.- Le BIP353 publie un URI entier dans un enregistrement TXT signé DNSSEC sous le libellé
_bitcoin-payment, de sorte qu'un nom lisible par un humain résout vers des instructions de paiement.
L'adresse elle-même est facultative. La grammaire du BIP21 autorise zéro caractère d'adresse, ce qui est le fonctionnement de bitcoin:?r=... et celui d'un URI composé uniquement d'une offre aujourd'hui.
Pourquoi cela compte quand vous achetez du bitcoin
Le moment où un URI Bitcoin compte le plus est le retrait, quand des bitcoins quittent une plateforme d'échange que vous ne contrôlez pas pour arriver là où vous les contrôlez.
Presque toutes les plateformes d'échange présentées sur ce site, de Kraken et River jusqu'à Relai et Bitpanda, vous donnent une simple zone de texte pour l'adresse de destination. Cette zone attend l'adresse, pas l'URI. Collez bitcoin:bc1q... dedans et vous obtiendrez généralement une erreur de validation, parfois un champ silencieusement tronqué et un retrait échoué. Prenez ce qui se trouve entre les deux-points et le point d'interrogation, et collez uniquement cela.
Le trafic circule aussi dans l'autre sens. L'écran de réception de votre propre portefeuille matériel, une page de paiement de commerçant et un échange pair-à-pair vous remettent tous des URI plutôt que des adresses seules. Un URI est plus sûr sur exactement un point : le montant voyage avec lui, donc vous ne pouvez pas vous tromper sur le total. Il n'est pas plus sûr sur le point qui compte le plus. Rien dans un URI n'est signé. Le champ label est du texte libre choisi par celui qui a construit la chaîne, donc une page d'hameçonnage peut écrire label=Kraken%20Withdrawal et votre portefeuille affichera ces mots sans commentaire.
C'est pourquoi l'écran du portefeuille matériel est le contrôle qui compte. Quoi qu'affirme un URI, un dispositif de signature vous montre l'adresse qu'il s'apprête à payer sur un écran que des logiciels malveillants de presse-papiers ne peuvent pas réécrire. Comparez les premiers et les derniers caractères là, sur l'appareil, pas dans l'onglet du navigateur qui a produit le lien.
Un exemple concret : payer la facture d'un café
Supposons qu'une caisse imprime un QR code et que votre téléphone lise bitcoin:bc1q...w5mdq?amount=0.00042&label=Kaffeehaus&message=Table%207.
Votre portefeuille en tire trois faits : payer 0,00042 bitcoin, envoyer cette somme à cette adresse, et afficher les mots Kaffeehaus et Table 7 sur l'écran de confirmation. Il fait ensuite plusieurs choses que l'URI n'a jamais demandées. Il choisit lesquelles de vos sorties non dépensées utiliser, estime un taux de frais à partir de sa propre vue du mempool, ajoute une sortie de monnaie rendue et attend votre approbation.
Ce qu'il ne fait pas, c'est vérifier quoi que ce soit sur le destinataire. Il n'a pas vérifié que le commerce contrôle l'adresse, que 0,00042 bitcoin est le prix convenu, ou que le libellé est honnête. Ces vérifications vous reviennent. Sur un café, la conséquence est un café perdu. Sur un virement à cinq chiffres, il vaut la peine de lire l'adresse sur le dispositif de signature par groupes de quatre caractères avant d'approuver.
URI Bitcoin vs adresse
Une adresse est la destination seule, sans instructions attachées. Une adresse bech32 moderne compte 42 caractères pour une sortie segwit à clé unique et 62 pour une sortie taproot, et elle ne dit rien sur la somme à envoyer ni sur le destinataire. Un URI est un conteneur : une adresse plus un montant, un libellé et un message facultatifs. Vous pouvez toujours récupérer l'adresse à partir d'un URI en lisant le texte entre le schéma et le premier point d'interrogation. L'inverse est impossible, car une adresse n'a jamais porté de montant au départ.
URI Bitcoin vs facture BOLT11
Une facture BOLT11 est l'équivalent Lightning, et elle se comporte différemment sur trois points qui comptent. Elle est à usage unique, elle engage un hachage de paiement plutôt qu'une adresse, et elle expire, avec une valeur par défaut de 3 600 secondes quand le commerçant n'en fixe aucune. Un URI Bitcoin n'expire jamais et peut être payé deux fois, ce qui est un atout sur une page de dons et un danger sur une facture. Le QR code unifié évite de choisir en plaçant une chaîne BOLT11 dans le paramètre lightning= d'un URI ordinaire, ce qui permet à chaque portefeuille d'emprunter le rail qu'il prend en charge.