Dans cet article concis, nous allons étudier les mécanismes des transactions du protocole Bitcoin. Je vais vous expliquer simplement ce que sont les UTXO, les inputs, les outputs, et comment tout cela s'articule.
L'objectif sera de disposer d'une meilleure compréhension du fonctionnement interne de la transaction afin de pouvoir aborder plus tard des stratégies d'optimisation de la confidentialité sur Bitcoin.
Sommaire :
Les UTXO.
Avant de pouvoir aborder les rouages de la transaction Bitcoin, il est important de comprendre le concept d'UTXO.
Le "bitcoin" représente simplement une unité de compte. Il n'existe pas en réalité. Au lieu de cela, ces unités sont représentées sur le réseau éponyme par des UTXO : "Unspent Transaction Output".
Un UTXO est alors simplement une sortie de transaction non dépensée, et donc par extension, une somme de bitcoins qui appartient à un utilisateur à un moment donné.
Par exemple, imaginons que Bob dispose sur son portefeuille de :
Un UTXO de 0.1 bitcoin.
Un UTXO de 0.5 bitcoin.
Un UTXO de 0.4 bitcoin.
Le solde total de son portefeuille est alors de 1 bitcoin.
Chaque UTXO représente une chaîne de signatures électroniques qui constitue une chaine de propriété entre les différents utilisateurs qui ont eu la possession de cette pièce depuis sa création par un mineur.
Tous les UTXO sont bloqués par des conditions de dépenses. Lorsqu'un utilisateur souhaite dépenser un UTXO qui lui appartient, il doit prouver au réseau qu'il remplit bien les conditions du script qui bloque cet UTXO. Typiquement, les UTXO sont bloqués sur une clé publique. Pour pouvoir dépenser un UTXO bloqué sur cette clé, l'utilisateur doit prouver au réseau qu'il est bien en possession de la clé privée associée, en fournissant une signature électronique avec ladite clé. C'est pour cela que l'on dit que votre portefeuille Bitcoin ne renferme pas réellement des bitcoins, mais qu'il garde plutôt vos clés privées donnant accès à vos bitcoins.
Un UTXO peut être comparé à une pièce d'or. Il n'est pas divisible mais uniquement fusible. C'est-à-dire qu'un utilisateur ne peut pas diviser un UTXO représentant un certain montant en bitcoin. Il peut uniquement le fondre afin de créer un ou plusieurs nouveaux UTXO d'une nouvelle valeur arbitraire, inférieure ou égale à la valeur initiale.
Enfin, un UTXO peut représenter n'importe quelle valeur en bitcoins, du satoshi (cent millionième) jusqu'au maximum.
La transaction Bitcoin.
Une transaction Bitcoin est constituée d'entrées et de sorties (les inputs et les outputs). Son objectif est de transférer de la valeur depuis un ou plusieurs utilisateurs, vers un ou plusieurs autres utilisateurs, en produisant des nouvelles conditions de dépenses sur une pièce et en créant de nouveaux UTXO.
Chaque utilisateur est représenté par une ou plusieurs paires de clés permettant de produire des signatures électroniques.
En théorie, une transaction peut disposer d'une infinité d'inputs et d'outputs. Seule la taille maximum d'un bloc vient limiter ce nombre.
Les entrées sont constituées d'UTXO, débloqués par les utilisateurs qui souhaitent dépenser, et les sorties représentent de nouveaux UTXO, qui appartiendront aux utilisateurs destinataires. Le rôle de la transaction Bitcoin va donc être de "consommer" les UTXO en entrées pour "construire" de nouveaux UTXO en sortie, tout cela afin de transmettre la propriété d'une pièce en changeant ses conditions de dépense.
Pour revenir à notre comparaison entre la pièce d'or et l'UTXO, on peut imaginer la transaction Bitcoin comme la fonte de pièces d'or. Imaginons que Bob dispose d'une petite pièce d'or de 6 grammes, et qu'il souhaite acheter une baguette qui coûte 1 gramme d'or (oui, cela fait cher pour une baguette). Bob va devoir fondre sa pièce de 6 grammes pour réaliser deux autres pièces : une de 5 grammes qu'il va garder pour plus tard, et une de 1 gramme qu'il va donner au boulanger en échange de la baguette.
Sur Bitcoin, la transaction fonctionne de la même manière. Imaginons que Bob dispose d'un UTXO de 10000 sats, et qu'il souhaite acheter une baguette qui coûte 4000 sats. Bob va créer une transaction avec en entrée un UTXO de 10000 sats qu'il va consommer, et en sortie il va créer 2 UTXO d'une valeur de 4000 sats et de 6000 sats. L'UTXO de 4000 sats ira au Boulanger afin de lui payer sa baguette, et l'UTXO de 6000 sats reviendra à Bob. Cet UTXO qui revient à l'émetteur initial de la transaction est également appelé "change" ou "monnaie".
Le montant total des sorties de la transaction doit donc être inférieur ou égal au montant total des entrées de la transaction.
Il se peut également que Bob ne dispose pas d'un UTXO supérieur à 4000 sats (le prix de la baguette), mais qu'il dispose de plusieurs UTXO plus petits. Dans ce cas, Bob peut mettre plusieurs inputs dans sa transaction afin de disposer d'un montant total en input au moins égal aux outputs souhaités. Le fait de mettre plusieurs UTXO d'un même utilisateur en input d'une transaction Bitcoin s'appelle : "fusionner" des UTXO (ou "merge" en anglais).
Dans cet exemple, nous pouvons voir que Bob disposait de 2 UTXO, respectivement de 3000 sats et de 2500 sats. Ces deux UTXO proviennent de transactions précédentes. Bob les a donc mis en entrées de la même transaction afin de pouvoir sortir un UTXO assez grand pour payer la baguette.
Les frais de transaction, quant à eux, ne constituent pas un output de la transaction. Ils représentent la différence entre le montant total des inputs et le montant total des outputs.
Ces frais sont récupérés par le mineur qui validera le bloc dans lequel la transaction sera incluse. Le mineur récupère les frais de transaction ainsi que la récompense Coinbase grâce à la transaction Coinbase. Cette transaction spéciale est la seule qui ne dispose pas d'input puisqu'elle vient créer de nouveaux bitcoins.
Conclusion.
Vous connaissez dorénavant les bases du fonctionnement d'une transaction sur Bitcoin. Ces quelques informations essentielles vont nous permettre d'étudier par la suite l'optimisation de la confidentialité sur Bitcoin.
Pour aller plus loin :