Dans le précédent article, j'ai montré comment la cryptographie asymétrique servait à assurer la sécurité des bitcoins. Dans le système, un utilisateur dépense des bitcoins en signant numériquement un message de transaction à l'aide de sa clé privée. Cette transaction est ensuite envoyée au réseau pair-à-pair et inscrite sur la chaîne de blocs (blockchain), l'immense registre qui répertorie l'ensemble des transactions ayant eu lieu depuis le 3 janvier 2009. La chaîne de blocs est considérée comme infalsifiable, ce qui assure que la transaction envoyée ne sera ni modifiée ni supprimée et que les bitcoins utilisés ne seront pas dépensés plusieurs fois. Nous allons voir dans cet article comment le protocole Bitcoin parvient à garantir la validité de ce registre sans se servir d'une autorité centrale.
Dans le système financier actuel, ce sont les banques qui jouent le rôle d'intermédiaires de confiance. Lorsque vous faites un virement, votre banque vérifie que vous possédez bien les fonds nécessaires, les retire de votre compte et se met en relation avec la banque du destinataire pour lui affirmer que le paiement est valide. La seconde banque se charge alors d'octroyer les fonds sur le compte bénéficiaire. Il n'y a pas d'échange de monnaie physique : il s'agit simplement d'une modification scripturale des registres bancaires.
Contrairement au système bancaire, Bitcoin se passe de tiers de confiance et c'est là son innovation majeure. Au lieu de se fonder sur la confiance accordée à une organisation externe, la validité de la chaîne de blocs (le registre des transactions) est basée sur un mécanisme économique appelé le minage : certains membres du réseau sont incités à utiliser leur puissance de calcul pour résoudre un problème mathématique qui garantit que personne ne puisse modifier la chaîne. Ce mécanisme récompense les validateurs grâce à la création de nouveaux bitcoins. C'est pour cela qu'on les appelle les mineurs : par analogie aux mineurs d'or qui utilisent leur énergie pour extraire de nouvelles quantités de minerai.
Je vous propose de vous exposer en détail le fonctionnement du processus de minage en examinant comment est organisé le réseau pair-à-pair, comment la chaîne de blocs est structurée et quel est l'algorithme qui est utilisé pour assurer la fiabilité du système.
Les fonctions de hachage
Avant toute chose, je pense qu'il est nécessaire de faire un rappel sur les fonctions de hachages. Les fonctions de hachage sont utilisées à divers endroits du protocole Bitcoin, et notamment, ce qui nous intéresse ici, dans le processus de minage. Leur particularité est qu'il s'agit de fonctions à sens unique qui sont exécutées rapidement. Elles transforment un message de taille variable en un hachage de taille fixe. Ce hachage est aussi appelé empreinte. L'utilité de ces fonctions réside dans le fait qu'une petite modification du message d'origine engendre un grand changement dans le hachage produit.
Dans cet article nous considérerons uniquement la fonction SHA256, puisqu'elle seule intervient dans le minage. La fonction SHA256 (de l'anglais Secure Hash Algorithm) est une fonction de hachage qui produit un hachage de 256 bits, soit 32 octets. Comme toutes les autres fonctions de hachage, sa propriété principale est de hacher un message, de telle façon que toute modification mineure apportée à ce message modifiera totalement son empreinte. Par exemple, si l'on considère le message « Le chat joue dans la cuisine », le hachage de ce message par SHA256 sera :
SHA256( "Le chat joue dans la cuisine" ) = c95938c5bcfa85d715f71de6446a67660fd1364aac18006a78db8a9872331a75
Si on rajoute un point à ce message ou qu'on insère une faute de frappe, son hachage changera complètement :
SHA256( "Le chat joue dans la cuisine." ) = 4fd4ee90e50efa75bdef7211313137885f1a76baccbe236617613c4eb01a8dc7 SHA256( "Le chot joue dans la cuisine" ) = 53aacaed1f2d0a833a2ae76264575479c3e7b2e038dd97f413c4c59a3600ae17
C'est cette propriété très importante qui fait que les fonctions de hachage sont très utilisées en cryptographie et dans Bitcoin.
Le réseau pair-à-pair et les mineurs
Le protocole Bitcoin se base sur un réseau pair-à-pair d'ordinateurs connectés à Internet. Le principe du réseau pair-à-pair est que tous ses membres sont à égalité : aucune machine n'a de privilège par rapport aux autres, comme cela peut être le cas dans le modèle client-serveur. Les membres de ce réseau sont usuellement appelés des nœuds.
Le réseau Bitcoin possède une architecture distribuée et se rapproche d'un graphe complet : tout les nœuds sont connectés avec presque tous les autres nœuds et recherchent en permanence de nouveaux voisins. Par conséquent, si un nœud se déconnecte pour une raison quelconque (arrêt volontaire, panne, saisie par les pouvoirs publics, etc.), le réseau n'est pas impacté et peut continuer à fonctionner.
Chaque nœud possède une copie de la chaîne de blocs, et maintient également une copie de l'ensemble des UTXO (la base de donnée des bitcoins dépensables) et une copie de l'ensemble des transactions non confirmées appelé mempool. Chaque nœud met à jour régulièrement ces bases de données en échangeant des informations avec les autres nœuds du réseau.
Certains nœuds participent à la validation de la chaîne de blocs en mettant à contribution leur puissance de calcul : ce sont les nœuds miniers ou mineurs. Les autres nœuds ne minent pas, mais permettent à leurs utilisateurs de vérifier les transactions de manière absolue.
Les nœuds du réseau pair-à-pair sont dits complets car ils téléchargent l'entièreté de la chaîne de blocs et des autres données relatives aux transactions. Néanmoins, ces nœuds sont difficiles à entretenir et nécessitent d'avoir du matériel informatique performant et une bonne connexion à Internet. C'est pourquoi la plupart des gens se contentent d'utiliser des « nœuds » non-complets pour envoyer et recevoir des transactions comme les portefeuilles à vérification de paiement simplifiée (dits SPV pour Simplified Payment Verification), qui ne téléchargent qu'une partie de chaîne de blocs et ne communiquent avec le réseau que pour obtenir des informations essentielles. L'ensemble des nœuds complets et non-complets forment ce qu'on appelle le réseau étendu de Bitcoin.
La chaîne de blocs
Le concept de chaîne de blocs, ou de blockchain, est habituellement mis en avant quand on parle de Bitcoin, à tel point qu'on a fini par nommer l'ensemble des techniques utilisées par la cryptomonnaie, la technologie blockchain. La chaîne de blocs est, comme son nom l'indique, une chaîne de blocs, les blocs étant des ensembles ordonnés de transactions. La chaîne de Bitcoin commence par le bloc 0, appelé le genesis block et créé le 3 janvier 2009. Tous les autres blocs viennent à la suite dans un ordre chronologique. Un nouveau bloc est ajouté à la chaîne toutes les 10 minutes en moyenne. La chaîne de blocs constitue donc un registre de toutes les transactions, ordonné chronologiquement et mis à jour régulièrement. Elle est très lourde : environ 200 Gio pour Bitcoin (BTC) et 160 Gio pour Bitcoin Cash (BCH).
Tous les nœuds complets du réseau possèdent une copie de cette chaîne de blocs et certains d'entre eux, les mineurs, utilisent leur puissance de calcul pour ajouter de nouveaux blocs à la chaîne. Nous verrons plus bas que c'est le fait d'ajouter des blocs à la chaîne qui la rend infalsifiable.
Pour la suite, nous prendrons l'exemple du bloc 478 558, validé le 1er août 2017 à 13:16:14 UTC.
Comment un mineur procède-il pour ajouter un bloc à la chaîne ? Tout d'abord, il regroupe un ensemble de transactions en les prenant dans la mempool, la base de données des transactions non confirmées qui est partagée par tous les nœuds. Si le poids de toutes les transactions excèdent la taille limite des blocs (1 Mio pour BTC actuellement), le mineur choisit en priorité les transactions aux frais les plus élevés.
Ensuite, le mineur ajoute à ces transactions une transaction de récompense appelée coinbase. Dans cette transaction de récompense, le mineur indique son adresse (ou l'adresse de sa coopérative s'il fait partie d'une coopérative), de sorte qu'il sera payé s'il arrive à valider son bloc. Comme on l'a dit, la récompense des mineurs se compose de nouveaux jetons créés ex-nihilo. Néanmoins, cette récompense est limitée par le protocole : le mineur ne peut pas se récompenser plus qu'un certain montant. Cette limite, qui était de 50 bitcoins par bloc en 2009, est réduite de moitié environ tous les 4 ans (tous les 210 000 blocs pour être précis) et elle est actuellement de 12.5 bitcoins. Le mineur inclut également dans la récompense les frais de transaction payés par les utilisateurs.
Transaction de récompense (coinbase) du bloc # 478 558
L'étape suivante pour le mineur consiste à ajouter à ce bloc un en-tête. Cet en-tête est une donnée de 80 octets qui est placée juste avant les transactions. Il est divisé en 6 parties :
- Le numéro de version.
- L'identifiant du bloc précédent, qui permet de chaîner le bloc au bloc précédent.
- La racine de Merkle des transactions du bloc, qui est une empreinte correspondant à toutes les transactions.
- L'horodatage (timestamp), l'heure et la date de la validation du bloc.
- La valeur cible du réseau, qui intervient dans l'algorithme de la preuve de travail et qui est inversement proportionnelle à la difficulté.
- Le nonce, qui est le nombre qu'on fait varier dans l'algorithme de la preuve de travail.
L'arbre des transactions
Les transactions sont ordonnées dans le bloc sous la forme d'un arbre de Merkle. Un arbre de Merkle est un arbre de hachage permettant de vérifier l'intégrité de l'ensemble des transactions sans avoir à les vérifier toutes. Voici ci-dessous un exemple d'arbre de Merkle pour 6 transactions.
Si l'on prend la figure à l'envers, on peut voir qu'elle ressemble bien à un arbre. Les transactions constituent les feuilles de cet arbre et le résultat du calcul total en est la racine.
Le principe de calcul est le suivant. Les transactions (TX) sont hachées deux fois par la fonction de hachage SHA256, ce qui nous amène à la première hauteur de branche. Par exemple, la première empreinte (H1) est calculée en prenant le double SHA256 de la transaction 1 :
H1 = SHA256( SHA256( TX1 ) )
Puis, on concatène deux à deux les empreintes obtenues et on les hache à nouveau. Par exemple, les empreintes des transactions 1 et 2 sont sont combinées pour donner l'empreinte H1,2 :
H1,2 = SHA256( SHA256( H1 + H2 ) )
On répète ensuite l'opération pour chaque hauteur jusqu'à ce qu'il ne reste plus qu'une seule empreinte. Si on tombe sur un nombre impair dans le processus, il faut combiner la dernière empreinte avec elle-même, comme c'est le cas ici pour l'empreinte H5,6 :
H5,6,5,6 = SHA256( SHA256( H5,6 + H5,6 ) )
L'empreinte finale est la racine de l'arbre et est appelée racine de Merkle. Dans le bloc 478 558, la racine de Merkle est :
5b65144f6518bf4795abd428acd0c3fb2527e4e5c94b0f5a7366f4826001884a
Cette organisation des transactions est particulièrement utile au fonctionnement des nœuds SPV (Simplified Payment Verification). Ces derniers se contentent de télécharger les en-têtes des blocs pour ne pas avoir à télécharger la chaîne entière. L'ensemble des en-têtes (qui est aussi une chaîne) pèse actuellement environ 40 mégaoctets, ce qui permet l'existence des portefeuilles sur smartphone.
Pour vérifier une transaction, les nœuds SPV ne peuvent donc pas se reporter à la chaîne de blocs : ils doivent demander au réseau les informations qui les intéressent. L'organisation en arbre de Merkle présente l'avantage de réduire considérablement la charge. Par exemple, si je veux vérifier la transaction 2 dans l'arbre précédent, je n'aurais qu'à obtenir du réseau les empreintes H1, H3,4 et H5,6,5,6, procéder aux différents hachages et comparer le résultat avec la racine de Merkle enregistrée sur mon appareil.
L'algorithme de la preuve de travail
Une fois que le mineur a construit son bloc, il doit le valider (on dit aussi « le miner » ou « le trouver »). Pour ce faire, il doit trouver la solution à un problème mathématique dépendant des données du bloc. Plus précisément, cela consiste à trouver un nombre (appelé nonce) qui, inclus dans l'en-tête du bloc, fasse que le hachage par le double SHA256 de cet en-tête soit inférieur à une valeur cible définie par le réseau et qui est elle-même encodée dans l'en-tête. Pour le dire de manière plus formelle, le problème est :
Trouver nonce tel que SHA256( SHA256( EN_TÊTE( nonce ) ) ) < cible
Cette condition fait que le hachage produit commencera par un grand nombre de zéros. C'est ce hachage qui est utilisé comme identifiant du bloc.
Détails du bloc 478 558
Puisque la fonction de hachage SHA256 est une fonction à sens unique, il est impossible de deviner quel nonce pourra remplir cette condition sans tester toutes les possibilités. C'est ce que les machines des mineurs font : elles calculent des milliards de hachages en faisant varier le nonce des milliards de fois1. C'est ce qu'on appelle la preuve de travail (ou proof-of-work) : un mineur prouve qu'il a travaillé, qu'il a dépensé de l'énergie pour trouver une solution au problème. Cette preuve de travail est facilement vérifiable : il suffit de calculer une seule fois le hachage de l'en-tête du bloc à l'aide du nonce trouvé.
Une fois le problème résolu, le mineur partage sa solution sur le réseau. Les autres nœuds vérifient que son bloc est valide et le bloc est ajouté à la chaîne de blocs. Si un quelqu'un d'autre trouve une solution avant lui, le mineur est contraint de recommencer tout le processus en reconstruisant un nouveau bloc à partir de ce bloc trouvé. Il s'agit d'une course : chaque fois qu'un bloc est trouvé, les mineurs du réseau abandonnent leur calcul et se mettent immédiatement à chercher le prochain bloc.
Le minage des blocs est une histoire de probabilités et la probabilité de trouver un bloc dépend de la valeur cible du problème. Cette valeur cible est ajustée automatiquement pour qu'un bloc soit miné environ toutes les 10 minutes. Il s'agit une moyenne : le temps d'attente entre deux blocs peut être de quelques secondes ou peut dépasser une heure. La difficulté, elle, est définie comme l'inverse (à une constante près) de la valeur cible2 : en effet, plus la valeur cible est basse, moins il y a de solutions au problème et il est donc plus difficile à résoudre. Puisque le temps de bloc moyen est censé être fixe, la difficulté augmente avec la puissance de calcul totale du réseau.
Un élément important de cet algorithme de la preuve de travail est le chaînage des blocs. Puisque chaque bloc fait référence au bloc précédent, il est très dur de modifier les vieux blocs. Modifier un bloc entraînera un variation dans le bloc suivant, puis dans le bloc qui vient après, etc. Il faudrait non seulement refaire la preuve de travail du bloc modifié (c'est-à-dire retrouver une solution au problème pour la même difficulté), mais aussi la preuve de travail des blocs suivants. De cette manière, plus un bloc est profond dans la chaîne, plus il est difficile à modifier. C'est pour cela qu'on considère qu'une transaction est irréversible une fois qu'elle a été incluse dans un bloc enfoui sous 5 autres blocs (6 confirmations).
Bitcoin est un système économique incitant les différents acteurs à agir pour la sécurité du réseau plutôt qu'à essayer de l'attaquer. Le mineur met à disposition sa puissance de calcul afin de résoudre le problème mathématique et de gagner la récompense. Il ne respecte pas les règles du protocole par honnêteté morale, mais parce qu'il espère bien faire un profit. S'il lui arrivait d'inclure une transaction invalide dans un bloc ou d'enfreindre une autre règle, son bloc serait refusé par le réseau et il ne serait pas payé.
Le mécanisme de minage permet donc une chose qui paraît simple de prime abord : parvenir à un consensus de manière décentralisée. C'est une façon de se mettre d'accord sans recourir à un tiers de confiance. En se mettant d'accord sur qui possède quoi, Bitcoin permet notamment de résoudre le problème de la double dépense : nul ne peut réussir à dépenser deux fois le même bitcoin. Les nœuds se mettent également d'accord sur un temps de réseau grâce à l'horodatage inscrit dans chacun des blocs. Le réseau fait cela tout seul : aucune entité externe n'est là pour garantir que l'heure est la bonne. C'est grâce à cela que la difficulté peut être ajustée pour que le temps de bloc moyen reste de 10 minutes.
Cette capacité du système à résoudre les conflits est particulièrement visible lorsque deux blocs sont trouvés sur le réseau au même moment. En effet, il n'y a pas qu'une seule solution au problème mathématique et il peut arriver que 2 nœuds miniers trouvent deux blocs différents dans un intervalle de temps réduit. Ces blocs sont tout à fait valides et au moment où ils sont minés rien ne peut les départager. Les nœuds sélectionnent la première solution qu'ils recoivent ce qui entraîne une séparation du réseau en deux parties : l'une qui considère que le premier bloc est valide et le second invalide, l'autre qui considère que le second bloc est valide et le premier invalide.
Les mineurs agissent chacun à partir de leur point de vue. Ils se mettent à miner le prochain bloc en le chaînant avec le bloc qu'ils considèrent comme étant valide. Cependant, la situation se résout lorsque l'un mineur trouve un nouveau bloc : c'est alors la plus longue chaîne qui est sélectionnée par le réseau3. Le bloc qui est chaîné avec ce nouveau bloc est retenu. L'autre bloc est mis de côté et considéré comme invalide : il est appelé bloc « orphelin ».
Cette situation accidentelle s'appelle un fork (un embranchement) et se produit occasionnellement sur le réseau Bitcoin. C'est d'ailleurs de là que viennent les noms de hard fork et soft fork qui sont des embranchements provoqués par un changement des règles de consensus.
Fork de la chaîne
Le taux de hachage et les coopératives de minage
Comme je l'ai dit, Bitcoin est un système économique. Sa sécurité dépend de la concurrence à laquelle se livrent les mineurs, et plus la concurrence est féroce, plus le système est sûr.
Le taux de hachage (hashrate), qui est le nombre moyen de fois par seconde où un bloc est haché sur le réseau, correspond à la puissance de calcul totale et mesure la sécurité du réseau. La difficulté étant calculée à partir de ce taux de hachage, plus il est élevé, plus il devient difficile pour une institution externe d'attaquer le protocole.
Le taux de hachage a augmenté de façon spectaculaire au fil des années, comme on peut le voir sur le graphique ci-dessous. Aux débuts de Bitcoin, lorsque le jeton ne valait rien, le minage était réalisé par des particuliers à l'aide du processeur central de leur ordinateur (CPU). Le taux de hachage était ridiculement petit, mais à mesure que le bitcoin acquérait de la valeur, le matériel utilisé pour miner s'est amélioré, ce qui a provoqué 2 grands bonds :
- Le premier bond s'est fait à partir de 2010 : grâce au minage par processeur graphique (GPU) et par circuit logique programmable (FGPA), le taux de hachage a explosé pour atteindre les 10 TH/s (10 × 1012 hachages par seconde) à la mi-2011.
- Le second bond a eu lieu à partir de 2013 : c'est alors le minage par circuits intégrés spécialisés (ASIC) qui a changé la donne, en multipliant l'ordre de grandeur par 1 000 000.
Actuellement (juin 2018), le taux de hachage moyen du réseau de BTC est de 35 EH/s et celui de BCH atteint les 5 EH/s (1 EH = 1018 hachages). Cependant, il ne faut pas s'attendre à un autre bouleversement car un plafond technique a été atteint dans la fabrication de ce matériel.
Source : blockchain.info. Échelle logarithmique.
Initialement, le minage pouvait être réalisé par des individus à l'aide de leur ordinateur personnel. Satoshi Nakamoto a d'ailleurs longtemps été le seul mineur. Peu à peu, cette tâche s'est professionalisée et industiralisée. On a notamment vu apparaître des fermes de minage dans les endroits les plus avantageux de la planète, des entrepôts remplis de machines se livrant uniquement au minage de bitcoins.
Avec la hausse considérable du taux de hachage, les petits mineurs sont à présent désavantagés. En effet, même si un mineur possède une machine performante (un ASIC dernier cri), celui-ci ne peut pas prendre le risque de miner tout seul : la chance de trouver un bloc est trop faible. Il peut avoir de la chance et tomber sur une solution assez rapidement ce qui amortirait son investissement ; mais il peut aussi être malchanceux et ne jamais miner un bloc avant que sa machine tombe en panne. C'est la raison de l'existence des coopératives de minage (mining pools). Pour combattre les probabilités et lisser leurs revenus, les mineurs mettent en commun leur puissance de calcul et se partagent les gains lorsqu'un bloc est miné.
Ces coopératives de minage sont connues et représentent la quasi-totalité du taux de hachage. Elles ont la bonne pratique de signer la transaction de récompense dès qu'elles minent un bloc, ce qui permet d'identifier la proportion de chaque coopérative dans le taux de hachage total. On peut voir dans les diagrammes ci-dessous comment elles sont réparties pour Bitcoin (BTC) et Bitcoin Cash (BCH).
Bitcoin (BTC) | Bitcoin Cash (BCH) |
---|---|
Source : coin.dance. |
Source : cash.coin.dance. |
Les deux plus grosses coopératives de minage, Antpool et BTC.com, sont détenues par Bitmain, une entreprise chinoise spécialisée dans la fabrication d'ASIC. Cette dominance du marché (plus de 40 %) inquiète, d'autant plus que Bitmain a aussi des parts dans la coopérative ViaBTC. En effet, la formation d'un gros conglomérat dans ce domaine affaiblit Bitcoin, dont la sécurité repose sur la concurrence entre les mineurs. Cependant, en l'absence d'un autre bond technique, cette dominance est vouée à s'estomper.
Que se passerait-il si la puissance de calcul d'une coopérative de minage dépassait les 50 % de la puissance totale ? Si une entité unique parvenait à atteindre 51 % du taux de hachage, elle pourrait alors miner la chaîne la plus longue (en moyenne), ce qui lui permettrait de faire ce qu'elle veut dans la limite des règles de consensus. Par exemple, elle serait en mesure de choisir quelles transactions inclure dans les blocs (« censure »). Cette entité pourrait également mettre en place une attaque dite de la majorité, qui lui permettrait de « voler » quelqu'un avec elle réalise une transaction. Cependant, elle ne pourrait pas s'amuser à modifier ou supprimer les transactions enregistrées dans la chaîne de blocs sans recalculer toute la preuve de travail : cela enfreindrait les règles de consensus, ce qui provoquerait un hard fork.
L'attaque de la majorité (ou des 51 %) n'est pas, comme on peut le lire parfois, l'écriture d'une double-dépense dans la chaîne de blocs : celle-ci deviendrait alors invalide, ce qui rendrait l'opération inutile. L'attaque consiste en réalité à réaliser une grosse transaction et à l'annuler par la suite. Pour ce faire, l'attaquant initie la transaction avec une autre personne et, dans le même temps, mine des blocs alternatifs secrets ne contenant pas cette transaction. Après avoir attendu que le nombre de confirmations requis (6 blocs dans le cas standard, mais il peut être plus élevé) et après avoir obtenu l'objet acheté, l'attaquant partage sa chaîne de blocs alternative sur le réseau, chaîne sur laquelle il est toujours propriétaire des bitcoins dépensés. Puisqu'il possède 51 % du taux de hachage, cette dernière sera (à un moment ou un autre) la chaîne la plus longue et sera acceptée comme telle par le réseau. La personne avec qui l'attaquant a échangé se retrouve alors sans l'objet qu'elle lui a donné et sans les bitcoins échangés. Une telle attaque de la majorité a eu lieu sur le réseau Bitcoin Gold (BTG) en mai 2018 : les fraudeurs ont réussi à voler plusieurs dizaines de millions de dollars à plusieurs plateformes d'échange.
Toutefois, cette faiblesse de la concentration du taux de hachage a sa limite. Tout d'abord, les coopératives ne sont pas des ensembles soudés : les mineurs composant une coopérative sont libres de la quitter pour en intégrer une autre. De plus, les mineurs sont des investisseurs qui doivent rentabiliser leur capital et doivent donc faire en sorte que le bitcoin ne perde pas de sa valeur. Une attaque des 51 % étant une très mauvaise nouvelle qui ferait baisser son prix, les mineurs ont donc tout intérêt à ce qu'aucune coopérative ne possède trop de puissance de calcul. Les coopératives sont elles-aussi lourdement investies dans le milieu et n'ont pas d'intérêt à attaquer le réseau. D'ailleurs, GHash.IO, une ancienne coopérative de minage ayant eu son heure de gloire, avait brièvement excédé les 51 % en juillet 2014 mais rien de frauduleux ne s'était produit : au contraire, elle s'était par la suite engagée à ne plus dépasser les 40 % de la puissance de calcul totale.
En résumé, Bitcoin est une invention ingénieuse qui permet de s'affranchir d'une autorité centrale pour réaliser des paiements. Son innovation est le mécanisme économique qui permet la formation d'un consensus décentralisé : le minage utilisant l'algorithme de la preuve de travail. Cette technologie permettant d'atteindre un consensus de manière décentralisé, appelée souvent technologie blockchain, est révolutionnaire, et certains imaginent déjà quels autres usages elle pourrait avoir (contrats intelligents, vote en ligne, notariat, etc.)
Merci d'avoir lu cet article.
Notes
1. Le nonce est un nombre encodé sur 4 octets et son potentiel de variation est fortement limité pour la puissance de calcul actuelle du réseau Bitcoin : il n'y a que 4 294 967 296 possibilités et le taux de hachage du réseau se mesure en exa-hachages par seconde (1018 hachages par seconde). C'est pourquoi les mineurs font également varier un nombre (inutile) contenu dans la transaction de récompense (coinbase) appelé extra-nonce. La changement de la transaction de récompense modifie complètement la racine de Merkle et donc le hachage de l'en-tête.
2. La champ de difficulté de l'en-tête encode la difficulté et la valeur cible d'une façon un peu particulière. Dans le bloc 478 558, le champ de difficulté est 0x18014735
. Il se décompose en exposant (0x18
) et en un coefficient (0x014735
). La valeur cible est définie par :
cible = coefficient × 256(exposant - 3) = 0x0000000000000000014735000000000000000000000000000000000000000000
La difficulté est calculée à partir de cette valeur cible. On a diff = bdiff / cible
où bdiff est la valeur cible maximale du réseau :
bdiff = 0x00ffff × 256(0x1d - 3) = 0x00000000ffff0000000000000000000000000000000000000000000000000000
La difficulté est donc de 860 221 984 436
.
3. Plus précisément, la chaîne valide ayant le plus de travail accumulé, le travail d'une chaîne étant défini comme la somme des difficultés de tous ses blocs.
Références
Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, octobre 2008.Andreas M. Antonopoulos, Mastering Bitcoin: Programming the Open Blockchain, chapitres 8, 9 et 10.
Ton article me sauve la vie.
J'avais un mal fou à comprendre l'arbre de merkle. Ton explication est claire et limpide.
Merci merci merci.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Il sert à ça 👍
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Waw en voilà un article imposant mais qui explique dans le moindre détail le principe de fonctionnement de la Blockchain et du minage.
Malgré le fait que je sois dans le "milieu" tu as réussi à me faire découvrir de nouvelles choses et également de me permettre de mieux les expliquer ou du moins plus facilement à mon entourage.
Merci beaucoup et à bientôt ;-)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Merci !
J'ai découvert ton journal du mineur il y a peu et je suis tes aventures depuis (RIP pour le zencash). Effectivement ce n'est pas facile d'expliquer comment fonctionne le minage ! J'ai mis du temps à en avoir une vision (à peu près) claire.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Haha merci de prendre de ton temps pour le lire :-D
J'avoue que pour le Zencash, on est clairement pas dans un moment agréable... Plus qu'à espérer qu'il se relève... Si il se relève un jour...
J'avoue, Le mining peut être tres simple à expliquer, Par contre à partir du moment où tu rentre dans les détails, Cela devient très vite complexe...
Mais l'explication est bonne et sympa ;-)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Je pense que tu es (facilement) le meilleur ressource française sur le sujet.
Je me permettrai de compléter ceci.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Merci @evildido !
Oui bonne remarque. Je dis en note que ça dépend de la difficulté (donc de la puissance de calcul) :
Mais vu que la difficulté reste à peu près constante d'un bloc à l'autre (même dans le fork du pirate), on peut simplifier en disant "la plus longue chaîne" non ?Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Non justement. Car si c’etait Le cas, l’attaque à 51% ne fonctionnerait pas (du fait que la longueur serait la même)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Tu me fais douter tout d'un coup.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
J’essaie de retoucher dans le wiki de bitcoin.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ca tombe bien que tu causes attaque 51%.
J'avais bien compris ça, mais il y a un truc qui me chifone concernant les clients SPV.
C'est notamment l'affirmation que j'ai trouvé ici. https://en.bitcoin.it/wiki/Weaknesses#Attacker_has_a_lot_of_computing_power
Tu saurais m'aider ?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Un nœud complet peut effectivement mentir par omission au client SPV en ne transmettant pas une transaction qui a eu lieu. Par contre, il ne peut pas lui faire croire qu'une transaction existe alors que ce n'est pas le cas.
L'idée c'est que les clients SPV se connectent à plusieurs nœuds choisis aléatoirement pour demander les informations qui l'intéresse. Cela limite les risques. La sécurité est relative mais c'est tout à fait acceptable pour des petits utilisateurs. Pour des gros commerces en ligne par contre, c'est mieux d'entretenir un nœud pour vérifier les transactions de manière absolue.
cf. Mastering Bitcoin, chapitre 8
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
oui, mais ne pas transmettre et voler est un peu différent dans ma tête :(.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
À part ça je vois pas trop.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
T'a vue que t'avais gagné quelque chose à mon giveaway: https://steemit.com/giveaway/@jeanpi1908/results-of-my-steemit-anniversary-giveaway
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Salut, non je n'ai pas remarqué. Pourtant j'aurais dû le voir dans mes notifcations Busy vu que tu m'as mentionné XD
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit