URL: https://linuxfr.org/users/gof/journaux/comment-fonctionne-bitcoin Title: Comment fonctionne Bitcoin Authors: Gof Date: 2013年07月12日T12:28:38+02:00 License: CC By-SA Tags: bitcoin Score: 65 Dans ce journal je vais essayer d'expliquer les mécanismes derrière [[Bitcoin]]. Je couvre ici uniquement les aspects techniques. Pour bien comprendre ce journal, il est préférable d'avoir des notions de base de cryptographie, en particulier comprendre ce qu'est une [[Fonction de hachage]] et une [[signature numérique]]. # Bitcoin c'est quoi ? # Le but de Bitcoin est une monnaie et un moyen de payement sur internet décentralisé hors du contrôle des gouvernements, des banques, ou d'une seule société. Le mot « Bitcoin » fait référence au protocole décrivant cette monnaie virtuelle ainsi qu'à son implantation de référence. C'est aussi le nom de l'unité de cette monnaie. Bitcoin est décentralisé. Tout qui le souhaite peux devenir un nœud du réseau en installant le logiciel. # La _blockchain_ # Bitcoin se base sur une base de données distribuée: la _blockchain_. Elle est à voir comme un gros registre qui contient toutes les transactions effectuées. Cette base de donnée est répliquée sur tous les nœuds. La blockchain étant accessible à tous, tout le monde peux voir combien de Bitcoins possède chacun : ![image 1](http://i.imgur.com/IgtMP5k.png) Quand Alice veut donner 0.3 Bitcoin à Bob, elle diffuse sa transaction aux différents nœuds. Après un certain temps, un des nœuds (dit « mineur ») va vérifier la transaction et l'ajouter dans la blockchain. Dans mon exemple, c'est Victor qui valide la transaction, et se donne 25 bitcoins en récompense. Ce sont ces récompenses qui « créent » de nouveaux bitcoins. Et c'est pour cela que les nœuds qui vérifient les transactions sont appelés des mineurs (par analogie aux mineur d'or). ![image 2](http://i.imgur.com/JTwgphf.png) Cette analogie est une simplification. En réalité, les noms n'apparaissent pas en clair dans la blockchain. À la place, on a des adresses bitcoin, que l'on peut considérer comme des numéros de compte. Une adresse bitcoin encode le hash d'une clef publique. Voici donc une image un peu moins simplifiée de ce à quoi ressemble un bloc de la blockchain: ![image 3](http://i.imgur.com/1pDS3g0.png) Dans mon analogie, chaque bloc de la blockchain est une page du registre des transactions. La page contient une liste des transactions et quelques autres méta données. La transaction en rouge1 est une transaction spéciale qui crée des bitcoins et les donne à l'auteur du bloc. Le bloc contiens aussi un hash du bloc précédent (en vert1 sur mon image). Le mineur a aussi dû vérifier que la page précédente est valide, c-à-d que toute les transactions sur la page sont valides, que le mineur précédent ne s'est pas attribué plus de bitcoins que prévu par le protocole et que le hash de la page précédente est suffisamment petit. # Difficulté # En effet, le hash d'un bloc doit être plus petit qu'une certaine valeur. Pour ce faire, le mineur doit trouver et ajouter une _nonce_ dans le bloc (en bleu1 sur mon image) de manière à ce que le hash (SHA-256) soit suffisamment petit. La seule façon de trouver cette _nonce_ est d'en essayer plein jusqu'à en trouver une qui convient (_brute force_). Cela demande beaucoup de CPU et de chance. C'est ici que réside l'aspect innovant du système. Cette preuve de travail fait que tous les nœuds votent avec leur CPU, et qu'il est difficile pour une seule entité qui voudrait tricher de le faire. La difficulté est ajustée automatiquement de manière à ce que il y ai en moyenne un bloc qui soit créé toute les 10 minutes. Elle est recalculée tout les 2016 blocs et est basée sur le temps qu'il a fallu pour trouver les 2016 blocs précédents. Cela répond aux questions du genre « que se passe-t-il quand les PC deviendront plus puissants ou que plus de monde essaieront de miner ? » Les bitcoins ne se créeront pas plus vite, mais créer des bitcoins deviendra plus difficile. # Récompense et frais de transactions # En plus de la récompense de 25 bitcoins, les mineurs reçoivent les frais de transactions. Lorsqu'on effectue une transaction, on peut donner aussi une petite somme au mineurs pour les inciter à prendre en compte la transaction. Cela signifie que les transactions ne sont pas gratuite, mais les frais de transactions sont négligeables. Le but des mineurs est d'arriver à publier un bloc (une page du registre). Ils ont un intérêt à trouver un bloc grâce à la récompense de qu'ils sont autorisé à se donner. Si deux mineurs publient un bloc en même temps, c'est celui qui sera contenu dans la plus grande chaîne qui gagne (dans le livre avec le plus de page qui se suivent). En pratique il s'agit souvent du premier qui publie un bloc. Bitcoin a été annoncé en 2008. Le premier bloc de la blockchain principale fut créé en janvier 2009. La récompense pour trouver un bloc était de 50 bitcoin et est divisée par deux tous les 210000 blocs (environ tous les 4 ans). Depuis décembre 2012, la récompense est de 25 bitcoin. En 2140, il n'y aura plus de récompense, et le nombre de bitcoin aura atteint un maximum de 21 millions. # Ramifications # Si l'on souhaite changer le protocole il faut mettre tous les nœuds d'accord. Si une partie des nœuds désire faire des changements dans le protocole, il y aura une ramification de la chaîne (deux registres différents). Si cela devait se produire, les gens ne feront confiance qu'à l'une des ramifications et c'est celle-là qui gagnera. Une ramification s'est déjà produite à cause d'un bug, corrigé dans la version 0.8 de bitcoin. Les mineurs qui tournaient encore sur de vielles versions du logiciel n'ont pas accepté certains blocs. # Comment est déterminé le prix du bitcoin ? # Le cours du bitcoin dépend de ce que le marché lui donne comme valeur. Pour acheter ou vendre des bitcoins il faut se rendre sur un site d'échange. Personnellement, j'utilise http://bitcoin.de Sur ces sites, les utilisateurs peuvent mettre des offres d'achat et de vente au prix qu'ils souhaitent. Le prix du bitcoin se trouve au milieu : un prix auquel les vendeurs acceptent de vendre et que les acheteurs acceptent de payer. Vu qu'il existe de nombreux sites d'échange, le bitcoin reste décentralisé. Cependant Mtgox est le plus gros site d'échange de bitcoins et quand ce dernier éprouve des problèmes, cela se répercute sur le cours du bitcoin. Le cours du bitcoin a été très volatile ces derniers temps. La volatilité du prix est un léger problème pour la bonne utilisation du bitcoin. Mais on peut espérer que cette volatilité est due aux fait que le bitcoin est encore jeune. # Pour aller plus loin : transaction scriptées. # J'ai volontairement simplifié le format des transactions dans mon explication. Les adresses bitcoin que j'ai décrites plus haut ne sont qu'une convention entre les clients existants. Une transaction n'est pas le transfert d'un certain montant d'un compte à un autre. Une transaction doit plutôt être vu comme une liste d'_input_ et une liste d'_output_. Pour la blockchain et les mineurs, les adresses n'existent pas. Tout est une question d'_input_ et d'_output_. Un _output_ est en réalité un petit programme sous forme de script qui détermine comment une certaine somme peut être dépensée. Un input fait référence à un précédent output de la blockchain et passe les bons paramètres au scripts. Oui, vous avez bien compris, chaque transaction est un petit programme en lui-même. Le langage de script est un langage basé sur une pile et un bytecode assez simple. Il n'est pas Turing-complet (pas de boucle), mais il est tout de même assez puissant pour ouvrir pas mal de possibilités. Les primitives cryptographiques ont leur propre op-codes. Quasiment toutes les transactions effectuées sont du type standard qui fait passer des bitcoins d'une adresse à une autre. Le script de sortie ressemble donc à quelque chose comme ceci (en pseudo-code à la Javascript) : ```javascript function(sig, pubKey) { return HASH160(pubkey) == "" && CHECKSIG(sig, pubKey) } ``` La fonction CHECKSIG est une fonction qui vérifie que sig est la signature de la transaction avec la clef publique donnée. Mais on peux réaliser plein de truc cools. Par exemple : des transactions qui ne peuvent pas être exécutées avant une certaine date (utile pour un héritage) ou des transactions qui nécessitent plusieurs signatures (utile pour un compte de caution, ou dépôt avec une tierce partie de confiance). Tous ces exemples et d'autres sont expliqué ici : https://en.bitcoin.it/wiki/Contracts # Dérivés # L'idée des bitcoins a donné naissance à des dérivés. [Namecoin](http://dot-bit.org/) permet d'avoir un DNS décentralisé. D'autres alternatives changent la manière dont sont minés les bitcoins. Il est critiqué le fait de calculer des SHA-256 est un gaspillage d'électricité, mais aussi que ça favorise les gens ayant du matériel puissant comme des [ASIC](http://fr.wikipedia.org/wiki/Application_Specific_Integrated_Circuit) conçu pour. [Litecoin](http://litecoin.org/) utilise un autre algorithme de hashage qui demande beaucoup de mémoire en plus du CPU. Ils ont aussi réduit le temps de confirmation à 2,5 minutes en moyenne. [PPCoin](http://ppcoin.org/) utilise un système de [_Proof of stake_](http://en.wikipedia.org/wiki/Proof-of-stake). [PrimeCoin](http://ppcoin.org/primecoin) se base sur le calcul des nombre premiers pour faire avancer les mathématiques. # Conclusion # J'espère avoir donné une bonne introduction technique du bitcoin. Le bitcoin soulève aussi pas mal de questions d'ordre économique ou politique que je n'aborde pas dans ce journal. Merci à nud< et Krunch< pour la relecture. ^(1 Pardon aux daltoniens)

AltStyle によって変換されたページ (->オリジナル) /