Aller au contenu
buybitcoinsmart

Glossaire / Référence pour développeurs

OP_RETURN

Qu'est-ce qu'OP_RETURN ?
OP_RETURN est l'opcode qui rend une sortie de transaction impossible à dépenser de manière prouvable, ce qui permet d'inscrire une petite quantité de données arbitraires dans la blockchain sans alourdir l'ensemble des bitcoins non dépensés.

Une sortie dont le script commence par 0x6a ne peut jamais être dépensée par personne, si bien que les nœuds complets la retirent de l'ensemble des UTXO qu'ils doivent garder à portée de main. Bitcoin Core 0.9.0 a rendu ces sorties standard en mars 2014 avec une allocation de 40 octets, portée à 80 octets de données utiles dans la version 0.11.0. Si vous achetez pour conserver, vous n'aurez jamais besoin d'en créer une, mais vous payez celles des autres par le marché des frais.

Comment cela fonctionne

OP_RETURN fait échouer le script à l'instant où il est atteint. Rien ne peut satisfaire une sortie verrouillée de cette façon et, contrairement à une adresse de brûlage, où des bitcoins sont envoyés vers un hash dont personne ne possède la clé, l'impossibilité est visible par un logiciel plutôt que simplement probable. Cette visibilité est tout l'intérêt de la chose : un nœud tient un index de chaque sortie dépensable, et une sortie dont la mort est prouvée n'a jamais à y entrer.

Les portefeuilles qui en construisent une fixent sa valeur à zéro et placent les données utiles après l'opcode, généralement sous la forme d'un seul push. Le résultat est une transaction avec une sortie normale qui paie quelqu'un et une seconde sortie qui porte des octets et pas d'argent.

La première version de l'opcode fut un désastre. En 2010, un script d'entrée et un script de sortie étaient exécutés joints l'un à l'autre, et OP_RETURN terminait l'évaluation en signalant un succès, de sorte que celui qui dépensait pouvait l'ajouter et repartir avec des bitcoins appartenant à quelqu'un d'autre. La correction de cette année-là a à la fois séparé les deux moitiés de l'exécution et transformé l'opcode en échec inconditionnel. Son usage moderne comme support de données est venu quatre ans plus tard, alors que les développeurs bourraient déjà des données dans de fausses clés publiques que les nœuds ne pouvaient jamais élaguer.

Des limites de relais ont suivi, et aucune n'était une règle de consensus. Bitcoin Core a livré un support standard de 40 octets dans la version 0.9.0, a doublé l'allocation à 80 octets dans la version 0.11.0 en juillet 2015, et a permis une seule sortie de ce type par transaction. La version 30.0 a supprimé le plafond de taille par défaut et la règle de la sortie unique après un long débat public et houleux, au motif que les limites étaient contournées sans difficulté et poussaient les données vers des endroits pires. Bitcoin Knots a conservé les réglages par défaut plus stricts, et cette divergence de politique de relais est l'un des désaccords actuels dans le bitcoin.

Pourquoi cela compte quand vous achetez du bitcoin

On ne vous demandera jamais de créer une sortie OP_RETURN, et si un site web vous dit d'envoyer du bitcoin vers une telle sortie, c'est une arnaque : il n'y a rien vers quoi envoyer. Certaines plateformes et certaines chaînes utilisent des champs de mémo, mais un retrait de bitcoin n'en a jamais besoin.

Ce qui vous atteint, ce sont les frais. Les données écrites on-chain sont en concurrence avec votre retrait pour le même espace limité, et l'effet est mesurable. Le bloc 840 000, miné le 20 avril 2024, a collecté environ 37,6 bitcoin en frais, le plus élevé de tous les blocs à ce jour, parce qu'un nouveau protocole de jetons s'est activé exactement à cette hauteur et que des milliers de personnes se sont précipitées pour y écrire. Quiconque a retiré ce jour-là depuis une plateforme d'échange a payé plusieurs fois le tarif courant pour ce privilège.

La défense tient au timing plutôt qu'à l'indignation. Les frais varient d'un ordre de grandeur en une seule semaine, si bien que consolider vos bitcoins, les déplacer hors d'une plateforme d'échange ou effectuer tout transfert non urgent un week-end calme coûte une fraction de ce que coûte le même transfert pendant une ruée de données. Les portefeuilles qui vous laissent fixer vous-même votre taux de frais, plutôt que de le deviner à votre place, méritent d'être préférés pour exactement cette raison. Si la question de politique vous tient à cœur, faire tourner Bitcoin Knots au lieu de Bitcoin Core est le moyen direct de l'exprimer, puisque la politique de relais est choisie individuellement par chaque opérateur de nœud.

Exemple concret : ce que coûtent 80 octets

Une sortie porteuse héritée de taille maximale occupe 92 octets sur le réseau : 8 octets de valeur fixée à zéro, un octet pour la longueur du script, puis 83 octets de script composés de l'opcode, d'une instruction push, d'un octet de longueur et de 80 octets de données utiles. Rien de tout cela n'est une donnée témoin, donc chaque octet compte quatre unités de poids, ce qui donne 368 unités de poids ou 92 octets virtuels. À 10 satoshis par octet virtuel, cela fait 920 satoshis avant de compter le reste de la transaction.

À titre de comparaison, une sortie native SegWit ordinaire fait 31 octets, ou 31 octets virtuels, donc la sortie de données coûte trois fois plus cher que payer quelqu'un. Les données n'ont jamais été gratuites, et le marché des frais est le seul mécanisme de rationnement dont dispose le bitcoin.

OP_RETURN vs transaction de données nulles

OP_RETURN est l'opcode ; une transaction de données nulles est ce que Bitcoin Core appelle le motif de transaction entier dès qu'une de ces sorties y apparaît. Le logiciel rapporte le type de sortie comme "nulldata" dans le JSON décodé, et c'est cette chaîne que les explorateurs de blocs affichent le plus souvent. La distinction est mince mais elle coupe court à une erreur de lecture répandue : une transaction de données nulles n'est pas une transaction qui ne déplace pas d'argent. Elle paie presque toujours quelqu'un en plus, les données voyageant dans une seconde sortie.

OP_RETURN vs inscription

Les inscriptions n'utilisent pas du tout OP_RETURN, ce qui est la source d'une confusion sans fin au sujet du stockage de données sur bitcoin. Le schéma ordinals, publié en janvier 2023, cache du contenu dans une branche de script Taproot qui n'est jamais exécutée, et cette branche réside dans le témoin, où chaque octet coûte une unité de poids au lieu de quatre. La conséquence pratique est l'échelle. Une charge utile OP_RETURN a été plafonnée par la politique de relais à 80 octets pendant une décennie, tandis qu'une seule inscription peut approcher la taille d'un bloc entier à un quart du coût en poids par octet. Runes, lancé en avril 2024, a pris le chemin inverse et encode délibérément ses messages de protocole dans OP_RETURN, ce qui explique pourquoi les deux débats sur les données dans le bitcoin portent en réalité sur deux mécanismes différents.

À ne pas confondre avec

Questions fréquentes

Puis-je écrire un message sur la blockchain bitcoin ?

Oui, dans une sortie OP_RETURN, et vous payez le taux de frais en vigueur pour chacun de ses octets. Une charge utile maximale héritée de 80 octets ajoute environ 92 octets virtuels à votre transaction, soit à peu près trois fois le coût d'une sortie de paiement ordinaire.

Les bitcoins envoyés vers une sortie OP_RETURN sont-ils perdus à jamais ?

Il n'y a rien à envoyer. Ces sorties sont créées avec une valeur de zéro, et aucun portefeuille ne vous laissera en payer une. Si un site vous demande d'envoyer du bitcoin à une adresse OP_RETURN, c'est une arnaque, car une telle adresse n'existe pas.

Bitcoin Core a-t-il vraiment supprimé la limite de 80 octets ?

Bitcoin Core 30.0 a supprimé le plafond de taille par défaut et la règle d'une seule sortie par transaction, et Bitcoin Knots a conservé les anciens réglages par défaut plus stricts. Aucune de ces limites n'a jamais été une règle de consensus, de sorte que les mineurs ont toujours été libres d'inclure des données plus volumineuses s'ils le souhaitaient.

Les inscriptions utilisent-elles OP_RETURN ?

Non. Les inscriptions stockent leur contenu dans une branche de script Taproot non exécutée à l'intérieur du témoin, qui est facturé à une unité de poids par octet plutôt que quatre. Les données OP_RETURN se trouvent dans la partie de la transaction qui n'est pas le témoin et coûtent quatre fois plus cher par octet.

À lire ensuite

Termes associés

Plus de termes : Référence pour développeurs

Lire cette page en anglais