Glossaire / Référence pour développeurs
Mémo PP
- Qu'est-ce que le mémo PP ?
- Le mémo PP était la note en texte libre UTF-8 que le BIP70 permettait à un marchand, à un payeur ou à un serveur d'accusé de réception de joindre à un paiement pour qu'un humain la lise.
Spécifié dans BIP-70.
Trois des quatre messages du BIP70 portaient un mémo, ce qui en fait le seul champ du protocole à circuler dans les deux sens. C'était du texte purement affiché : aucun portefeuille ne l'analysait, aucune signature ne protégeait la copie renvoyée par le payeur, et rien de tout cela n'atteignait la blockchain. Les notes de paiement fonctionnent encore ainsi aujourd'hui, et c'est pourquoi elles constituent un mauvais endroit pour placer quoi que ce soit d'important.
Comment cela fonctionne
Statut : historique. Le mémo apparaissait comme champ 5 de PaymentDetails, champ 4 du message Payment et champ 2 de PaymentACK, tous disparus de Bitcoin Core lorsque la prise en charge du BIP70 a été supprimée dans la version 0.20.0 le 3 juin 2020.
Chacun des trois avait un auteur différent et un lecteur différent.
Le marchand rédigeait le premier, et un portefeuille l'affichait sur l'écran de confirmation à côté du montant : un numéro de commande, un nom de produit, une ligne de conditions. Comme il se trouvait dans les détails sérialisés, la signature du marchand le couvrait, si bien qu'il ne pouvait au moins pas être réécrit en transit.
Le payeur rédigeait le deuxième et le renvoyait avec la transaction diffusée. Les instructions de remboursement et les notes au service client allaient ici, sans qu'aucune signature ne les protège.
Le marchand rédigeait le troisième dans l'accusé de réception, généralement un remerciement ou une estimation d'expédition. Rien ne le signait non plus.
Le BIP70 ne fixait aucune limite de longueur, si bien que les portefeuilles tronquaient là où leur mise en page s'arrêtait. Cette petite faille a un vrai tranchant. Un texte fourni par un attaquant, affiché à côté d'un nom d'entreprise vérifié, constitue une surface d'hameçonnage, et une note qui ressemble à une instruction officielle d'envoyer un paiement supplémentaire est convaincante précisément là où le client est le moins méfiant.
Où le voit-on
Les notes en texte libre jointes aux paiements sont bien vivantes, et chaque version moderne a sa particularité.
Les liens de paiement BIP21 comportent un paramètre message, encodé en pourcentage, affiché par le portefeuille puis oublié. Lightning va plus loin : une facture BOLT11 place sa description dans le champ d, et comme un champ étiqueté contient au plus 1 023 groupes de cinq bits, soit environ 639 octets, tout texte plus long doit être remplacé par son hachage de 256 bits dans le champ h. Les plateformes d'échange proposent un champ de référence sur leurs formulaires de retrait, dont le contenu ne quitte jamais leur propre base de données.
La seule note qui voyage réellement sur la chaîne est une sortie OP_RETURN. La politique de relais de Bitcoin Core autorisait une charge utile de 40 octets lorsque ce type de sortie est devenu standard dans la version 0.9.0, puis 80 octets à partir de la version 0.11.0. Vous payez des frais pour ces octets et ils sont publics pour toujours, si bien qu'en faire une note privée est une erreur que personne ne commet deux fois.
Tout le reste vous est local. Une note saisie dans votre propre portefeuille réside dans le fichier du portefeuille et non dans la phrase de récupération, si bien qu'une restauration sur un nouvel appareil ramène les bitcoins et aucun des mots que vous avez écrits à leur sujet. Exportez avant de migrer.
Mémo PP vs libellé
Un mémo décrit un paiement ; un libellé nomme une partie ou une adresse. Les mémos du BIP70 étaient écrits pour une seule transaction et affichés une fois, au moment du paiement. Un libellé BIP21 identifie qui est payé, et un libellé de portefeuille est la note de classement privée que vous attachez à une adresse ou à une transaction et conservez sur votre propre machine. Aucun des trois n'est signé par quelqu'un dont vous pouvez vérifier la parole, et aucun d'eux n'est visible pour le réseau.