Simples à effectuer pour un utilisateur lambda qui n'a qu'à faire quelques clics, les transactions qui ont lieu sur Bitcoin sont en fait le fruit d'un processus complexe que nous allons tenter de vous expliquer le plus simplement possible dans cet article. Tout comme un automobiliste n'a pas besoin de savoir ce qui se passe sous le capot pour conduire sa voiture, un utilisateur du réseau Bitcoin peut tout à fait se passer de ces connaissances pour envoyer ou recevoir des fonds. Cet article est donc destiné aux plus curieux d'entre vous, qui sont prêts à mettre la tête dans le moteur pour comprendre comment tourne la machine. Ceux d'entre vous qui ont lu le précédent article sur la preuve de travail et le consensus de Bitcoin comprendront ici encore davantage son utilité.
Temps de lecture estimé : 20 minutes
Table des matières
Qu'est-ce qu'une transaction ?
Sur Bitcoin, il existe deux types de transactions ou « TX » pour les intimes. Le premier correspond à la création de nouveaux jetons, tandis que le second est un transfert de bitcoin d'une adresse vers une autre. Vous trouverez ci-dessous une présentation plus détaillée de ces deux types de transactions.
Les coinbases transactions
Les coinbases transactions correspondent à la création ex-nihilo de bitcoins. Il s'agit de la récompense que touche un mineur pour son travail lorsqu'il mine un bloc, appelée récompense de bloc (divisée par deux tous les quatre ans à chaque halving). Ces bitcoins n'ont jamais été dépensés auparavant, puisqu'ils sont créés.
La coinbase transaction est la première transaction ajoutée dans un bloc. En plus des récompenses de blocs, on y ajoute aussi les frais des transactions incluses dans le bloc.
Les bitcoins qui sont ajoutés dans une coinbase transaction sont soumis à un régime spécial et ne peuvent pas être dépensés avant d'avoir reçu 100 confirmations de blocs.
Les transactions UTXO
UTXO est l'abréviation d'« Unspent Transaction Output » ou « sorties non dépensées » en français. En d'autres termes, il s'agit du nombre de bitcoins qui restent après avoir effectué un paiement.
Une transaction Bitcoin est constituée d'entrées et de sorties UTXO. Les entrées sont constituées des UTXO libérées par l'utilisateur qui paye, et les sorties sont de nouveaux UTXO qui sont distribués à qui de droit.
Pour être plus clair, partons d'un exemple simple. Imaginez que Paul détienne 50 BTC qu'il a reçu en minant un bloc. Il veut envoyer 20 BTC à Jean. Pour ce faire, Paul va créer une transaction avec une entrée d'un UTXO de 50 BTC, et une sortie de deux UTXO : une de 30 BTC qui lui revient (la monnaie) et une de 20 BTC qui sont envoyés à Jean.
Si Jean veut ensuite envoyer 5 BTC à Jacques, il va créer une transaction avec comme entrée son UTXO de 20 BTC et comme sortie deux UTXO : une de 15 BTC qui lui revient et une de 5 BTC qui revient à Jacques.
Toutes les transactions sur le réseau Bitcoin fonctionnent de cette manière. Chaque adresse Bitcoin comporte un solde qui correspond à la somme de toutes les UTXO provenant d'adresses ayant dépensé des bitcoins vers cette adresse.
Par exemple, si Jacques reçoit un paiement de 10 BTC, un paiement de 5 BTC, puis un paiement de 2 BTC, son adresse comportera 3 UTXO pour un solde total de 17 BTC.
Une transaction Bitcoin consiste ainsi à modifier le solde d'une adresse, en « consommant » les UTXO en entrée pour « fabriquer et distribuer » de nouveaux UTXO en sortie, tout cela afin de transmettre la propriété des jetons en changeant leurs conditions de dépense.
En effet, pour être validées, les transactions doivent être signées par le propriétaire de la clé privée associée à (ou aux) l'adresse d'entrée. Nous entrerons dans les détails de ce concept dans les paragraphes suivants.
Les transactions peuvent bien sûr être beaucoup plus complexes que celles décrites dans les exemples ci-dessus. Il peut notamment y avoir besoin de fusionner (« merge ») plusieurs UTXO en entrée pour obtenir un UTXO de taille suffisante pour honorer la transaction, comme dans l'illustration ci-dessous qui regroupe plusieurs UTXO pour envoyer 14 BTC d'une adresse à une autre.
Les règles qui déterminent le fonctionnement des transactions sont codées à l'aide du langage Script.
Les éléments du moteur à connaître
Avant de nous lancer dans le déroulé d'une transaction, nous devons nous pencher sur quelques éléments clés du réseau Bitcoin. Impossible de comprendre le fonctionnement d'un moteur sans avoir une idée des composants qui s'y trouvent. Ici pas de soupape, d'injecteur ou de piston !
Nous vous présenterons ces éléments de manière très succincte, premièrement parce que certains d'entre eux ont déjà été présentés dans les premiers articles de cette Encyclopédie, et deuxièmement afin d'éviter de nous éloigner du sujet de ce papier : les transactions Bitcoin.
Si vous voulez plus de détails sur ces éléments, n'hésitez pas à consulter les articles liés à des liens hypertextes, beaucoup plus complets.
Portefeuille, seed phrase, clé privée, clé publique et adresse publique
Pour mieux comprendre ces concepts, nous ferons ici une analogie avec le fonctionnement des banques avec lesquelles vous êtes sûrement plus familiers.
Un portefeuille Bitcoin, souvent appelé « wallet » est un logiciel ou un appareil qui permet de gérer ses adresses et ses clés à l'aide d'une seed phrase, ainsi que d’effectuer des transactions sur le réseau Bitcoin. Il peut s'apparenter à la banque.
Une adresse publique Bitcoin est une suite alphanumérique de 26 à 35 caractères sur laquelle on peut envoyer ou recevoir des bitcoins. Elle peut s'apparenter à un numéro de compte bancaire.
Une adresse est liée à une clé privée et à une clé publique :
- La clé privée : c'est une suite alphanumérique qui doit être gardée secrète par le propriétaire d'une adresse, car elle permet de signer les transactions (qui peuvent s'apparenter à des chèques) et de prouver qu’on est le propriétaire des bitcoins qui y sont associés. Sans clé privée, il est impossible de déplacer les bitcoins qui se trouvent sur une adresse ;
- La clé publique : c'est aussi une suite de caractères alphanumériques, qui permet de vérifier la validité des signatures sans révéler la clé privée. Elle est dérivée de la clé privée à l'aide de la cryptographie sur courbes elliptiques (Elliptic Curve Cryptography - ECC -). Elle sert elle-même à générer l'adresse publique à l'aide d'un processus en plusieurs étapes qui comprend du hachage et de l'encodage. Ceux d'entre vous qui voudraient plus d'information sur ce processus (hachage SHA-256, suivi d'un Hachage RIPEMD-160 avec ajout d'un préfixe, suivi d'un double hachage SHA-256 avec ajout d’un suffixe pour finir par un encodage en Base58Check) peuvent consulter cet article.
La « seed phrase » quant à elle, est l'élément qui permet d'obtenir une (ou des) clé privée. En français, ce terme peut être traduit de différentes manières : « phrase secrète », « phrase de chiffrement », « phrase mnémonique », ou encore « phrase de récupération ». Il s'agit d'une liste de 12, 18 ou 24 mots, qui, mis dans le bon ordre, permet de retrouver toutes les éléments cités ici : clé privée, clé publique et adresse publique. Ces derniers sont tous liés entre eux grâce à différents procédés mathématiques et cryptographiques.
Une adresse publique est générée à l'aide d'une clé publique, elle-même créée à partir d'une clé privée, elle-même obtenue par l'utilisateur grâce à une seed phrase.
En prenant le problème dans l'autre sens, la seed phrase permet de générer la clé privée, qui génère la clé publique, qui génère l’adresse Bitcoin. Chaque étape est unidirectionnelle : il n'est pas possible de retrouver la seed phrase à partir de la clé privée, ni la clé privée à partir de la clé publique, ni la clé publique à partir de l’adresse publique.
Grâce à un processus appelé HD Wallets (Hierarchical Deterministic Wallets), les portefeuilles actuels permettent de créer plusieurs ensembles de clé privée, clé publique et adresse publique à l'aide d'une seule seed phrase. Sans entrer dans des détails trop techniques, ils génèrent une clé privée principale qui est utilisée pour créer des sous-ensembles clé privée, clé publique et adresse publique « filles » à l'aide d'une fonction de dérivation (le plus souvent PBKDF2 - Password-Based Key Derivation Function 2).
Ainsi, à l'aide d'une seule seed phrase, un utilisateur peut contrôler une (quasi) infinité d'adresses Bitcoin.
Quiconque détient une seed phrase ou une clé privée est en mesure de déplacer les bitcoins des adresses liées. Un utilisateur doit donc protéger ces informations afin de ne pas voir ses bitcoins s'envoler.
Nous reviendrons sur l'utilisation concrète de tous ces éléments par les utilisateurs de portefeuilles numériques dans une prochaine partie.
Nœuds, mempool et mineurs
Les nœuds (nodes en anglais) sont des machines qui conservent une copie de la blockchain. Il en existe plusieurs types, comme évoqué lors de l'article précédent. Ils servent notamment à diffuser, vérifier et valider les transactions et les blocs.
Le mempool (abréviation de Memory Pool) est une base de données qui contient des transactions en attente d'être intégrées dans un bloc par un mineur.
Les nœuds miniers, ou mineurs, sont responsables de la création de nouveaux blocs. Le travail des mineurs consiste à remplir des blocs avec des transactions, puis à ajouter ces blocs à la blockchain grâce à la preuve de travail.
Les pools de minage sont des groupements de mineur qui travaillent ensemble pour augmenter leurs chances de miner un bloc. Les mineurs d’un pool partagent leurs ressources de calcul et se répartissent les récompenses selon leur contribution.
Cryptographie et hachage
Déjà évoqué précédemment, le hachage sur Bitcoin est quant à lui un processus cryptographique qui consiste à transformer des données de n’importe quelle taille en une chaîne de caractères de longueur fixe appelée valeur de hachage ou empreinte.
Le hachage a trois propriétés clés :
- Il est irréversible : il est impossible de retrouver les données d’origine à partir de la valeur de hachage ;
- Il est déterministe : il produit toujours la même valeur de hachage pour les mêmes données ;
- Il est sensible : un changement minime dans les données entraîne un changement important dans la valeur de hachage.
La fonction de hachage utilisée par Bitcoin est le SHA-256. Cette fonction produit une valeur de hachage en 256 bits, soit 64 caractères en notation hexadécimale. Par exemple, le hachage du mot “Bitcoin” est :
SHA-256 ("Bitcoin") = 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619ba5b592a22
Le hachage est utilisé à plusieurs niveaux sur le réseau Bitcoin, dont la création des adresses, la vérification des transactions et la génération des blocs.
Les différentes étapes d'une transaction
Maintenant que vous avez toutes les cartes en mains, voyons comment se déroule une transaction Bitcoin. Prenons un exemple simple où Paul veut envoyer 1 BTC à Jacques.
1. Lancement de la transaction
Paul décide d'envoyer 1 BTC à Jacques. Il se rend sur la section « Envoyer » de son portefeuille et complète le champ « Adresse » avec celle de Jacques, et le champ « Montant » avec « 1 BTC ». Le portefeuille ajoute automatiquement des frais d'envois destinés à payer les mineurs.
En cliquant sur « Envoyer », Paul valide ces informations et crée une transaction qu'il signe à l'aide de sa clé privée (la clé privée n'est pas la signature en elle-même, mais c'est le seul « outil » qui permet de l'apposer).
2. Diffusion et validation de la transaction
L'application du portefeuille de Paul transmet la transaction à un nœud émetteur qui la diffuse sur tout le réseau Bitcoin. Les nœuds qui reçoivent la transaction l'envoient dans le Mempool, en attente d'être sélectionnée par un mineur pour être ajoutée à un bloc.
Les mineurs sélectionnent en priorité les transactions qui paient le plus de frais, afin d'augmenter leurs revenus en BTC. Le site txstreet.com propose une animation qui permet de visualiser en temps réel les transactions qui arrivent dans le Mempool.
Les transactions y sont représentées par des personnes, le Mempool par le quai, les blocs par des wagons, et la blockchain par le train.
3. Contrôle de la transaction
Les nœuds récupèrent la transaction de Paul et vérifient qu'elle est valide grâce à la clé publique de Paul. Concrètement, ils vérifient que Paul détient bien les bitcoins qu'il souhaite envoyer.
Si la transaction est valide, les noeuds miniers prennent le relai afin d'inclure la transaction dans un bloc avec d'autres transactions en attente. Il s'agit du processus de minage.
Comme nous l'avons évoqué lors de précédents articles, tous les mineurs sont en compétition. Leur but est de former le bloc contenant les transactions en premier. Chacun d'entre eux place les transactions qu'il veut dans son bloc, et tente de résoudre un problème mathématique simple mais dont le résultat est complexe pour valider ce dernier.
En effet, pour rappel, pour ajouter un bloc de transactions à la blockchain, le mineur doit tout d’abord obtenir une valeur de hachage (empreinte) qui respecte certaines règles. Il doit résoudre un problème à l'aide des transactions contenues dans son bloc (non modifiables) et d'un « nonce » (arbitraire).
La difficulté principale du mineur consiste donc à changer de nonce jusqu'à ce qu'il obtienne une valeur de hachage valide. Cette empreinte, aussi appelée preuve de travail, est unique à chaque bloc de transactions.
Le premier mineur qui trouve une valeur de hachage valide pour son bloc diffuse ce dernier et son empreinte à tous les autres mineurs. N'hésitez pas à vous référer à nouveau à l'article précédent ainsi que celui consacré à la structure interne des blocs si ces notions ne sont pas totalement comprises.
4. Enregistrement de la transaction
Dès que la solution au calcul mathématique est découverte par l’un des mineurs, ce dernier transmet le bloc qu’il a « miné » à tous les autres nœuds du réseau. Ces derniers vérifient la validité de l'empreinte. Si elle est valide, ils conviennent que le bloc peut être ajouté à la blockchain.
Pour que le bloc soit ajouté, les mineurs doivent être d'accord, c’est-à-dire parvenir à un consensus. Une fois ce consensus effectif, le nouveau bloc est ajouté à la blockchain en étant relié au bloc précédent, lui-même relié au précédent, etc.
Jacques reçoit alors le BTC de Paul sur son adresse, et le mineur qui a miné ce nouveau bloc récupère la récompense de bloc (et les frais de transaction de toutes les transactions ajoutées au bloc). On dit alors que la transaction a été confirmée une fois.
Chaque bloc qui vient s'ajouter après celui contenant la transaction de Paul, constitue une confirmation supplémentaire pour cette dernière.
En règle générale, on dit qu'une transaction est considérée comme « sûre » sur Bitcoin une fois qu'elle a reçu 6 confirmations.
5. Visualisation de l'avancement d'une transaction
À partir du moment où la transaction est initiée par Paul, il est possible pour tout le monde de suivre l'évolution de son exécution sur le réseau.
Pour ce faire il suffit d'utiliser un « block explorer ». Il en existe plusieurs, tels que blockchair, blockchain.com ou encore bitcoinexplorer. Il est possible d'y entrer une adresse, le hash d'une transaction ou un numéro de bloc pour visualiser les informations les concernant.
Voici un exemple d'une transaction qui a été effectué ces derniers mois sur le réseau Bitcoin. Son hash est le suivant : ffc45ebc981d7644a620aeff54af5f1ced3741ee41ea94af57be986e28e8153d. Il peut être retrouvé par l'expéditeur d'une transaction directement sur le portefeuille utilisé lors de l'envoi.
En entrant ce hash sur n'importe quel block explorer, il est possible de voir toutes les informations qui s'y rapportent (émetteur, récepteur, frais, numéro de bloc, nombre de confirmations, etc.).
Si vous ne connaissez pas le hash de la transaction, il est aussi possible de la retrouver en recherchant l'adresse de l'émetteur (ici bc1q5hf0cfqdulrfqsdcfv0kt0hsa9a8v4pxjtyz5n) ou du récepteur sur l'explorateur de block. Toutes les transactions qu'elles ont reçues ou envoyées y sont répertoriées.
Les transactions sont donc totalement transparentes.
Les frais de transaction
Comme vous pouvez le voir sur le screenshot ci-dessus, les transactions ne sont pas gratuites et entraînent des frais.
Ces frais sont récupérés par le mineur au moment de miner un bloc et s'ajoutent ainsi aux récompenses de bloc. Ils jouent donc un rôle central dans le fonctionnement du réseau, et représentent une part de plus en plus importante du revenu des mineurs au fil des halvings (division des récompenses de bloc par deux, voir article suivant).
En effet, comme évoqué, les mineurs sélectionnent eux-mêmes les transactions qui les intéressent dans le mempool. Ils choisissent donc celles qui offrent le plus de frais afin d'augmenter leurs revenus.
Ainsi, les transactions fonctionnent comme un système d'enchère, les plus offrants voyant leurs transactions traitées en priorité. Les frais jouent aussi un rôle important dans la sécurité du réseau, en dissuadant les acteurs malveillants de procéder à des attaques Sybil, par exemple.
Dans tous les cas, c'est l'initiateur de la transaction qui choisit combien de frais il souhaite payer. Cependant, pour que sa transaction soit acceptée par un mineur, les frais doivent être dans la moyenne du marché.
La plupart des portefeuilles règlent automatiquement les frais à payer en fonction des conditions du moment, et font une proposition que l'utilisateur n'a qu'à valider si elle lui convient. Il est aussi bien sur possible de les régler manuellement, suivant le délai de validation souhaité. Vous pouvez consulter les frais en cours sur des sites tels que mempool.space afin d'avoir une idée du réglage optimal.
Quels que soient les frais que vous choisissez de payer, prenez le temps de bien les vérifier pour ne pas dépenser inutilement des portions de bitcoin. Ceci vous évitera aussi de faire la même erreur que cet utilisateur qui a accidentellement payé 20 BTC de frais (470 000 dollars à l'époque) !
En cas de forte utilisation du réseau, les frais pour qu'une transaction soit acceptée peuvent s'envoler, et il est arrivé plusieurs fois qu'un simple transfert de BTC coûte l'équivalent de plusieurs dizaines de dollars. Sur le graphique ci-dessous, vous pouvez voir l'évolution des frais moyens (en dollars) à payer par transaction.
Comme nous l'avons vu précédemment, la scalabilité est en effet la principale faiblesse du réseau Bitcoin. Heureusement des solutions existent pour faire face à ce problème, comme le Lightning Network que nous vous présenterons dans l'article suivant.
Le mot de la fin
Pour résumer ce qui a été évoqué dans cet article, disons que Bitcoin utilise la cryptographie pour garantir l'authenticité et l'intégrité des transactions. Une transaction Bitcoin est sécurisée et irréversible. Cette sécurité et cette irréversibilité augmentent avec le nombre de blocs ajoutés à la chaîne après la transaction.
La blockchain empêche les doubles dépenses et assure la traçabilité de chaque bitcoin.
Les transactions ne sont pas anonymes mais pseudonymes, car il est possible de connaître le contenu de chaque adresse ainsi que toutes les transactions qu'elle a reçu ou envoyé.
Elles sont incitatives, grâce à l'émission monétaire qui récompense les mineurs qui les valident. Enfin, elles sont également payantes pour les utilisateurs, qui doivent ajouter quelques satoshis de frais pour intéresser les mineurs.
Bien que beaucoup plus lentes que sur certaines autres blockchains, les transactions sur Bitcoin restent tout de même relativement rapides (un bloc est ajouté toutes les 10 minutes environ).
Leur coût dépend de l'utilisation du réseau. Les frais restent cependant souvent très compétitifs par rapport à ce que proposent les services bancaires classiques, notamment pour les gros montants et les transferts internationaux.
Ces deux paramètres primordiaux pour une adoption de masse sont bien sûrs au cœur des améliorations du réseau et sont déjà optimisés en partie grâce au Lightning Network que nous découvrirons ensemble dans le prochain article.
Enfin, cet article est volontairement resté très théorique. Dans une prochaine partie de l'Encyclopédie du Coin, nous aborderons des considérations plus « pratiques » qui vous permettront d'apprendre à utiliser un portefeuille crypto. Mais patience, votre apprentissage ne fait que commencer !