Chapitre 01 : Comment Bitcoin Fonctionne

Un résumé grossier

Les possesseurs de Bitcoin possèdent des clés privées qui leur permettent de prouver qu’ils possèdent bien des bitcoins. Grâce à ces clés, ils peuvent créer des transactions pour transférer les bitcoins vers d’autres addresses, ils peuvent aussi générer des adresses à laquelle des personnes pourront leur envoyer des Bitcoins.

Ces transactions seront propagées dans le réseau des machines Bitcoin dans lequel il n’y a pas de “serveur central”.

Le registre des transactions (la blockchain) est protégé grâce à un processus qui s’appelle minage, c’est aussi grâce à cela que les bitcoins sont créés.

Commençons par les transactions

Chaque transaction Bitcoin est identifiée par une chaine de caractère unique (qui est en fait un hash), vous pouvez en consulter une à cette adresse : bdd30ea834974f0d46aaaa7365713628f27f110c7fdd6ca6c72dc3105831522c

Pour faire simple, une transaction est comme un chèque, elle indique au réseau Bitcoin que le propriétaire de bitcoins transfère certains Bitcoins depuis une ou plusieurs addresses vers une ou plusieurs addresses.

Chaque transaction contient une ou plusieurs entrées ainsi qu’une ou plusieurs sorties.

Dans l’exemple au-dessus, nous avons trois entrées (inputs - débit) :

  • 0.00398267 BTC depuis l’adresse 1KgTjHJxF1is25AXnbLSMaaPpgRwrk7Jjd
  • 0.00397673 BTC depuis l’adresse 13qKacuofTJLrEbBbPZ3XVBtNE3rhH5nhy
  • 0.00397492 BTC depuis l’adresse 17m2EeznS8s3gqdhjwKX3N2LYAkWRHK8Rz

Ainsi que trois sorties (outputs - crédit) :

  • 0.00468699 BTC vers l’adresse bc1q36mevah64xwg4n7aa3fjkwqt3wg4f0p8qdqzdd
  • 0.00269926 BTC vers l’adresse 1KHwtS5mn7NMUm7Ls7Y1XwxLqMriLdaGbX
  • 0.00443173 BTC vers l’adresse 35XGbMmPRFuF8SWUiiTyJ19HKmKvbf9SYH

Vous pouvez remarquer que le total des entrées (0.01193432 BTC) n’est pas égal au total des sorties (0.01181798 BTC), c’est parce qu’une partie des fonds servent à payer les frais de transaction (0.00011634 BTC) qui seront versés au mineur qui a créé ce bloc.

Les transactions contiennent aussi des signatures électroniques prouvant que la personne qui émet cette transaction possède bien les adresses où sont pris les fonds en entrée (inputs). Ces signatures ainsi que les soldes spécifiés seront vérifiées par chacun des nœuds Bitcoin. Si jamais la signature ne correspondait pas ou que les fonds n’étaient pas suffisants, la transaction serait rejetée et ne serait jamais inscrite dans la Blockchain.

Les propriétaires des adresses en sortie (bc1q36mevah64xwg4n7aa3fjkwqt3wg4f0p8qdqzdd, 1KHwtS5mn7NMUm7Ls7Y1XwxLqMriLdaGbX & 35XGbMmPRFuF8SWUiiTyJ19HKmKvbf9SYH) peuvent désormais créer une transaction avec comme input ces adresses.

Une “contrainte” à noter est que lorsque vous utilisez une adresse comme input dans une transaction, vous devez utiliser l’ensemble des bitcoins qui s’y trouvent, vous ne pouvez pas en prendre qu’une partie, vous devez tout utiliser. Imaginons que vous soyez le propriétaire d’une adresse AAAAAA qui contient 0,5 BTC et que vous souhaiteriez transférer 0,1 BTC à une adresse BBBBBB.

Vous devrez faire une transaction avec comme entrée :

  • 0,5 BTC depuis AAAAAA

Et comme sorties :

  • 0,1 BTC vers BBBBBB.
  • 0,4 BTC vers AAAAAA.

Note : il est déconseillé de réutiliser des addresses, il serait donc mieux d’envoyer les 0,4 BTC vers une autre adresse que vous possédez aussi.

Un peu plus de détail sur les transactions

Dans le paragraphe précédent, nous avons simplifié le fonctionnement des transactions. Les choses auraient pu être aussi simple que ça, mais pour proposer des fonctionnalités avancées, les choses sont en fait un peu plus compliquées!

En effet, nous avons présenté les choses comme si les transactions étaient réalisées entre des adresses, mais ce n’est pas la réalité. La réalité, c’est que les transactions envoient des quantités de bitcoins vers des “outputs”. Ces “outputs” peuvent être utilisées en tant qu’input si vous avez la “formule” pour les déverrouiller.

Alors oui, la plupart du temps, on envoie des bitcoins à un output pour lequel on demande simplement de prouver que l’on est bien le propriétaire d’une adresse pour déverrouiller cet output et donc pouvoir l’utiliser comme un input d’une nouvelle transaction. Mais dans la réalité, vous pourriez très bien envoyer vos bitcoins vers un output qui, pour être utilisé, aient besoin de deux signatures, ou de résoudre une simple équation…

En fait, vous allez encoder dans la transaction le fait que les Bitcoins que vous envoyez vont être verrouillés par un Script (qui peut avoir de nombreuses et variées conditions). N’importe qui pourra utiliser les Bitcoins vérrouillés par ce script s’il fournit “une solution” à ce script.

Création d’une transaction avec un portefeuille

Un “wallet” est un outil où vous allez pouvoir stocker vos clés privées (à partir des clés privées, il calcule les clés publiques et les adresses Bitcoin, mais nous verrons cela plus tard). Ce sont ces clés privées qui vous permettent d’utiliser vos cryptomonnaies et c’est grâce ce logiciel que vous allez pouvoir créer, signer et envoyer des transactions au réseau Bitcoin.

Donc, si vous souhaitiez envoyer 0,02 BTC vers une adresse “B”, vous n’avez qu’à lancer votre wallet, entrer l’adresse du destinataire, le montant et le wallet va faire tout le travail pour vous !

Le portefeuille va utiliser les outputs existants vérrouillés par vos clés privées comme inputs pour créer votre transaction de 0,02 BTC et va mettre comme output un script qui pourra être “résolu” par le propriétaire de l’adresse " B".

La transaction est ensuite signée à l’aide de la clé privée par le portefeuille puis envoyée à un des nœuds du réseau Bitcoin. Seul le propriétaire de la clé privée de l’adresse B sera en mesure de fournir la solution à l’output du script de la transaction que vous venez de créer et pourra ainsi à son tour l’utiliser comme Input dans une nouvelle transaction vers quelqu’un d’autre !

Envoi & propagation de la transaction

Une fois la transaction créée et signée par le wallet, celle-ci va être envoyée au réseau de nœuds pour qu’elle finisse intégrée dans un des blocks de la blockchain. Bitcoin étant un réseau peer to peer, notre transaction va être envoyée à l’une des machines de ce réseau (on les appelle des nœuds). Après quelques vérifications faites par ce nœud ( signature, solde…), si tout est ok, ce nœud va transmettre la transaction aux autres nœuds du réseau qui feront la même chose et ainsi de suite… jusqu’à ce que tous les nœuds soient au courant !

En quelques secondes, votre transaction sera connue et acceptée par le réseau des nœuds Bitcoin. Le portefeuille du destinataire de votre transaction, qui scrute certainement d’une façon ou d’une autre le réseau bitcoin verra la transaction, dont il est le destinataire, arriver.

À ce moment, votre transaction n’est pas “minée” et n’est donc pas inscrite dans un des blocks de la blockchain, mais on peut, sans crainte, considérer qu’elle sera ajoutée un block et confirmée en moins d’une heure (cela dépend du nombre de transactions non encore dans la blockchain et des frais que vous avez décidé de payer pour votre transaction).

Minage

Voici une partie réellement compliquée à comprendre, car, à mon avis, on ne peut pas faire d’analogie avec autre chose de connu pour l’expliquer. Il va donc falloir lire les explications, les relire, se faire des schémas et cogiter un petit moment le sujet pour finir par comprendre.

Revenons à notre transaction précédente. Elle est donc présente sur l’ensemble des nœuds, mais elle n’a pas encore été intégrée dans un block de la blockchain, on peut dire qu’elle n’est pas encore écrite en dur dans la blockchain Bitcoin. Ce processus qui construit un bloc avec les nouvelles transactions s’appelle le minage.

Bitcoin utilise ce que l’on appelle la preuve de travail (Proof Of Work) pour les rendre non modifiables. Pour le moment, nous allons nous contenter d’une explication minimale : Chaque mineur utilise des ordinateurs (et donc de l’électricité) pour essayer de créer un nouveau bloc contenant les dernières transactions, mais pour que celui-ci soit accepté par l’ensemble des nœuds, ce bloc doit contenir la solution à un “problème mathématique” particulier.

Le minage est une compétition mondiale et décentralisée entre tous les mineurs pour créer un bloc valide. Le premier mineur qui enverra un bloc valide (contenant donc la solution au problème mathématique) aux autres nœuds se verra offrir les bitcoins qui seront créés à cette occasion plus les frais de transaction de l’ensemble des transactions du block.

L’ajout d’un block est d’ailleurs le seul moment où de nouveaux bitcoins sont créées. Pour info Bitcoin est déflationniste, de moins en moins de Bitcoin vont être créés au fur et à mesure que le nombre de blocks augmente… Il n’y en aura que 21 millions en tout. En effet, à peu près tous les 4 ans, le nombre de bitcoins créés à chaque bloc est divisé par deux. Vers 2140, plus aucun Bitcoin ne sera créée.

Aujourd’hui, il faut une énorme puissance de calcul pour avoir une chance de créer un bloc valide avant les autres donc pas la peine d’essayer avec votre ordinateur, même si vous avez une très bonne carte graphique.

Maintenant que notre transaction se trouve dans un bloc ajouté à la blockchain, le ou les destinataires de la transaction peuvent utiliser les outputs comme input de nouvelles transactions. Et ainsi de suite…