Comment le Sha256 et le Minage Protègent le Réseau Bitcoin

Comment le bitcoin est-il défendu par l'énergie ? Et qu'est-ce qu'un nonce ? Vous trouverez les réponses à ces questions et à bien d'autres dans ce document! | Arman the Parman | Bitcoin Magazine

Comment le Sha256 et le Minage Protègent le Réseau Bitcoin

Auteur: Arman the Parman | Traduit par: Sovereign Monk | SHA256 and Bitcoin Mining Walkthrough

Le fonctionnement de l'exploitation minière est fascinant. Lorsque je l'explique aux gens, j'aime voir leur visage au moment où ils sont époustouflés. Je vais vous l'expliquer ici, mais sachez que j'imagine tous vos visages au moment où vos esprits sont ébahis!

Je dois commencer par les fonctions de hachage. Sans les fonctions de hachage, Bitcoin ne serait pas possible. Laissez-moi d'abord vous expliquer ce qu'elles sont, non seulement pour que vous ayez l'air cool dans les soirées, mais aussi parce que c'est fondamental pour comprendre le fonctionnement de Bitcoin - en particulier le minage mais aussi les transactions - sous le capot.

Il n'est pas nécessaire de comprendre le fonctionnement de Bitcoin pour en bénéficier, tout comme il n'est pas nécessaire de comprendre le fonctionnement de TCP/IP pour utiliser Internet. Mais continuez, parce que c'est assez intéressant et je vous promets que ce sera facile à comprendre.

Les fonctions de hachage

Commençons par un schéma que je vais expliquer ci-dessous...

Image par @jirols_btc, mise à jour par @svmonk21

À gauche, l'entrée, au centre, la fonction, et à droite, la sortie. L'entrée peut être n'importe quelle donnée, du moment qu'elle est numérique. Elles peuvent être de n'importe quelle taille, à condition que votre ordinateur puisse les gérer. Les données sont transmises à la fonction SHA256. Cette fonction prend les données et calcule un nombre d'apparence aléatoire, mais avec des propriétés spéciales (discutées plus loin).

Le premier algorithme de hachage sécurisé (SHA) a été développé à l'origine par la NSA et il existe aujourd'hui de nombreuses versions différentes (Bitcoin utilise SHA256). Il s'agit d'un ensemble d'instructions sur la façon de mélanger les données d'une manière très compliquée mais spécifique. Les instructions ne sont pas secrètes et il est même possible de le faire à la main, mais c'est très fastidieux.

Pour SHA256, le résultat est un nombre de 256 bits (ce n'est pas une coïncidence).

Un nombre de 256 bits signifie un nombre binaire de 256 chiffres. Binaire signifie que la valeur est représentée par deux symboles, soit 0 ou 1. Les nombres binaires peuvent être convertis en tout autre format, par exemple en nombres décimaux, qui nous sont familiers.

Bien que la fonction renvoie un nombre binaire de 256 chiffres, la valeur est généralement exprimée au format hexadécimal, soit 64 chiffres.

L'hexadécimal signifie qu'au lieu des 10 symboles possibles comme ceux auxquels nous sommes habitués en décimal (0 à 9), nous avons 16 symboles (les dix auxquels nous sommes habitués, 0 à 9, plus les lettres a, b, c, d, e et f ; qui ont les valeurs 11 à 15). Par exemple, pour représenter la valeur du décimal 15 en hexadécimal, il suffit d'écrire "f" et c'est la même valeur. De nombreuses informations sont disponibles en ligne par le biais d'une recherche rapide sur Google si vous avez besoin de plus de détails.

Pour démontrer SHA256 en action, je peux prendre le nombre 1 et le faire passer par un calculateur de hachage en ligne, et j'ai obtenu ce résultat (en hexadécimal) :

Le cadre supérieur est l'entrée, le cadre inférieur est la sortie résultante.

Notez que tous les ordinateurs du monde produiront le même résultat, à condition que l'entrée soit la même et que la fonction SHA256 soit utilisée.

Le résultat du nombre hexadécimal, s'il est converti en décimal, est (remarquez qu'il faut plus de chiffres pour l'écrire) :

48,635,463,943,209,834,798,109,814,161,294,753,926,839,975,257,569,795,305,637,098,
542,720,658,922,315

Et converti en binaire c'est :

110101110000110101100100111001111111111001101001111110011100001100111010
110101110000000010011101111111101011010001111110101011101000111101011011
0100100111010101010001000101111000111010100100111000000000111100101
001011011101101101111000011101011011010010111101011100110101110011010110
011010111001101011100110101110011010111001101011100111

Juste par curiosité, voici la même valeur en base 64.

1w1k5/5p+cM61wCd/rR+ro9bSdVEXjqTgDylu28OtpY=

Notez que la plus petite valeur que SHA256 peut renvoyer est zéro, mais que la LONGUEUR est toujours de 256 bits. Voici comment le zéro est représenté :

00000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000
00000000000000000000

Et la plus grande valeur possible est :

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111

En décimal, cela donne :

115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,
584,007,913,129,639,935

En hexadécimal, c'est :

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFF

Notez qu'il y a exactement 64 F.

Le zéro en hexadécimal peut simplement être écrit comme un seul zéro, mais pour la sortie de hachage, il y en a 64 pour respecter l'exigence d'une sortie de taille fixe :

00000000000000000000000000000000000000000000000000000000000
00000

Voici un résumé de certains faits concernant la fonction de hachage qu'il est essentiel d'apprécier :

L'entrée ne peut pas être déterminée à partir de la sortie
L'entrée peut être de n'importe quelle longueur
La sortie est toujours de la même longueur
La sortie sera toujours reproduite à l'identique si vous fournissez la même entrée.
Toute modification de l'entrée, aussi minime soit-elle, entraînera une sortie imprévisible et très différente.
Le résultat semble aléatoire, mais est en fait déterministe (c'est-à-dire qu'il est calculé et reproductible).
Le résultat ne peut pas être prédit. Elle peut seulement être calculée et cela demande une quantité de travail mesurable par ordinateur (et des heures avec un crayon et du papier ! Ne le faites pas.)
Maintenant que vous comprenez le concept de base de ce qu'est un hash, vous pouvez comprendre l'explication du fonctionnement du minage de Bitcoin.

Mais avant de continuer, je vous recommande de vous rendre sur un calculateur de hachage en ligne, de jouer un peu avec et de tester par vous-même ce que j'ai dit sur les fonctions de hachage. J'aime bien celui-ci.

Exploitation minière

Je vais commencer par démontrer un concept de travail, d'où vient la "preuve de travail" du bitcoin.

Allez sur le calculateur de hachage en ligne et tapez "Je crée 50 bitcoins et me paie ce montant".

Tapez-le exactement, en respectant la casse, y compris le point. Vous devriez obtenir ce résultat :

Maintenant, créons une règle qui dit que pour que ce message de paiement soit valide, nous avons besoin que le hash commence par un zéro. Pour ce faire, nous devons changer l'entrée d'une manière ou d'une autre. Mais, comme vous l'avez appris, il est impossible de prévoir ce que sera la sortie pour une entrée donnée. Quelle modification pouvons-nous apporter pour garantir un hachage commençant par un zéro ?

Nous devons ajouter des données en procédant par essais et erreurs. Mais nous ne voulons pas non plus changer la signification du message d'entrée. Nous allons donc créer un champ (une section allouée) appelé "nonce" qui contiendra une valeur absurde.

Le mot "Nonce" est censé être dérivé de "number only used once", mais je ne le vois pas.

Remarquez ci-dessous comment le simple fait d'ajouter "Nonce :" en tant qu'en-tête de champ supplémentaire change la sortie du hachage.

La sortie ne commence toujours pas par un "0", alors ajoutons un peu de non-sens (j'ai ajouté un "x" sans signification) :

Il ne commence toujours pas par un zéro. J'ai essayé d'autres caractères jusqu'à ce que le hachage commence par un zéro :

Nous y voilà. Maintenant, selon les règles arbitraires que j'ai établies pour cette prétendue version de Bitcoin, le texte dans la fenêtre d'entrée est un bloc valide avec une seule transaction qui me rapporte 50 bitcoins.

Notez que les blocs Bitcoin sont essentiellement des pages d'un grand livre. Chaque bloc est numéroté et crée de nouveaux bitcoins, tout en répertoriant les transactions entre utilisateurs. Ce registre est l'endroit où vit le bitcoin.

Maintenant, une nouvelle règle. Pour le bloc suivant, le hash du bloc précédent doit être inclus. Je vais ajouter un peu de complexité et ajouter quelques champs supplémentaires pour approcher ce que contient un vrai bloc de bitcoin.

Le hash commence par un "f" et non par un "0", je vais donc devoir essayer quelques valeurs dans le champ nonce :

Cette fois, j'ai eu plus de chance et j'ai trouvé un nonce approprié après seulement quatre essais. Rappelez-vous que pour le premier bloc, il a fallu 22 essais. Il y a une part d'aléatoire ici, mais il n'est généralement pas trop difficile de trouver un hachage valide si tout ce que nous essayons d'obtenir est un zéro. Il y a 16 valeurs possibles pour le premier chiffre de hachage, j'ai donc une chance sur 16 que toute modification que j'apporte au champ de saisie fasse en sorte que le premier chiffre de hachage soit "0".

Notez que les champs de Bitcoin sont comme cela, mais il y a plus de détails que je n'ai pas ajoutés. Il s'agit juste d'illustrer un point, pas nécessairement de détailler exactement ce à quoi ressemble un bloc Bitcoin.

J'ajouterai un champ de temps au prochain bloc, car j'en ai besoin pour expliquer l'" ajustement de la difficulté " suivant :

Ci-dessus, le bloc numéro trois. Il inclut le hachage du bloc précédent et maintenant j'ai commencé à inclure l'heure. Le nonce que j'ai trouvé a réussi à faire commencer le hachage par un zéro (j'ai juste continué à taper un "1" jusqu'à ce que l'objectif de hachage soit atteint).

Il y en a assez maintenant pour que je puisse commencer à expliquer quelques concepts intéressants sur la blockchain Bitcoin et le minage.

Gagner un bloc

Le processus de minage est compétitif. Celui qui produit le premier un bloc valide se paie une récompense fixe pour le bloc. Un mineur qui produit le même numéro de bloc un peu plus tard ne reçoit rien - ce bloc est rejeté. Expliquer pourquoi c'est le cas causerait une trop grande diversion maintenant, donc je l'expliquerai dans l'annexe.

Une fois le bloc trois trouvé et diffusé à tout le monde (tous les nœuds Bitcoin), tous les mineurs arrêtent de travailler sur ce qui aurait été leur version du bloc trois. Ils commencent à construire par-dessus ce bloc trois réussi (en transférant son hachage de bloc dans un nouveau bloc) et commencent à travailler sur la recherche d'un nonce approprié pour le bloc quatre. Le gagnant publie le résultat et tout le monde commence à travailler sur le bloc cinq, etc.

À chaque bloc, de nouveaux bitcoins sont créés et constituent collectivement l'offre totale à ce jour. S'il y a beaucoup de mineurs, on peut s'attendre statistiquement à ce que les blocs soient produits plus rapidement, et donc à ce que les bitcoins soient créés plus rapidement. Un problème, non ?

À la recherche d'une offre limitée de bitcoins avec une émission prévisible dans le temps, Satoshi Nakamoto a pensé à ce problème et a introduit une boucle de rétroaction négative pour maintenir la production de blocs à des intervalles de 10 minutes en moyenne. Comment ? Voyez si vous pouvez trouver un moyen. Arrêtez-vous un instant et réfléchissez - voyez si vous pouvez trouver la même solution de génie et lisez la suite lorsque vous abandonnez.

NODES : J'ai parlé de blocs "valides". Et alors ? Qui vérifie ? Les nœuds Bitcoin. Un nœud Bitcoin conserve une copie de la blockchain jusqu'à présent et suit un ensemble de règles pour vérifier que les nouveaux blocs sont conformes aux règles et rejettent ceux qui ne le sont pas. Où sont les règles ? Dans le code. Un ordinateur qui télécharge le code Bitcoin est un nœud.

L'ajustement de la difficulté

Le temps moyen pour créer de nouveaux blocs Bitcoin est calculé par chaque nœud tous les 2016 blocs (c'est pourquoi le champ temps est nécessaire). Cela fait partie du protocole et des règles que les nœuds suivent. Une formule est appliquée pour ajuster le nombre de zéros avec lesquels chaque hachage de bloc doit commencer pour être valide.

Strictement, ce n'est pas le nombre de zéros qui est ajusté, mais une valeur cible sous laquelle le hachage doit se situer, mais il est plus simple d'expliquer qu'il s'agit de zéros de tête.

Si les blocs sont produits trop rapidement, la cible de hachage est ajustée selon des règles prédéfinies que tous les nœuds suivent de manière identique (c'est dans leur code).

Pour rester simple dans mon exemple, disons que d'autres personnes sont en concurrence avec moi, que les blocs sont produits trop rapidement et que le quatrième bloc nécessite deux zéros au lieu d'un, selon un calcul imaginaire.

Cela va me prendre un peu plus de temps pour obtenir deux zéros, mais nous imaginons qu'il y a beaucoup d'autres personnes en compétition avec moi, de sorte que le temps total pris par chacun pour trouver un bloc est maintenu à un objectif.

Voici le bloc suivant :

Notez l'heure. Plus de 10 minutes se sont écoulées depuis le bloc précédent (j'ai juste inventé le temps pour démontrer). L'objectif de 10 minutes est probabiliste ; on ne sait jamais exactement quand le prochain bloc sera trouvé.

J'ai joué avec le clavier pendant une minute jusqu'à ce que deux zéros apparaissent. C'était exponentiellement plus difficile que de trouver un seul zéro. La probabilité de trouver deux zéros à la suite est de 1 sur 162, soit une chance sur 256.

Si davantage de personnes se joignent à l'exploitation minière et à la compétition pour les nouveaux bitcoins, trois zéros finiront par être nécessaires.

Je viens de consulter le dernier vrai bloc de bitcoin, qui contient le hachage du bloc précédent. Le hash est le suivant :

000000000000000000084d31772619ee08e21b232f755a506bc5d09f3f1a43a1

Cela fait 19 zéros ! Il y a une chance sur 1619 de trouver un tel bloc à chaque tentative. Les mineurs de bitcoins effectuent de très nombreuses tentatives par seconde, collectivement dans le monde entier.

Le nombre de tentatives par seconde est connu sous le nom de "taux de hachage". Actuellement, le taux de hachage mondial estimé est d'un peu moins de 200 millions de terahashs par seconde (un terahash correspond à un trillion de hashs). Avec ce nombre de tentatives par seconde, un bloc dont le hachage commence par 19 zéros est trouvé toutes les 10 minutes environ.

À l'avenir, si davantage de mineurs se joignent à l'opération, le taux de hachage augmentera, les blocs seront trouvés plus rapidement et la difficulté du bitcoin s'ajustera pour exiger 20 zéros, ce qui ramènera la production de blocs à environ 10 minutes.

La réduction de moitié (Halving)

Au début du Bitcoin, 50 bitcoins étaient produits avec chaque bloc. Les règles de la blockchain du bitcoin précisent qu'après chaque tranche de 210 000 blocs, la récompense sera réduite de moitié. Ce moment est connu sous le nom de "division par deux" et se produit environ tous les quatre ans. La réduction de moitié, combinée à la difficulté d'ajuster les blocs à des intervalles de 10 minutes, signifie que vers 2140, la récompense par bloc sera de 0,00000001, ou 1 satoshi, la plus petite unité d'un bitcoin, et ne pourra plus être réduite de moitié. L'extraction minière ne s'arrêtera pas, mais la récompense par bloc sera nulle. À partir de ce moment, aucun nouveau bitcoin ne sera créé à l'avenir et le nombre de bitcoins est mathématiquement calculable et assez proche de 21 millions de pièces. C'est ainsi que l'offre totale est connue - elle est fixée de manière programmatique.

Même avec la récompense par bloc à zéro, les mineurs seront toujours incités à continuer à travailler afin de gagner des frais de transaction.

Comment exactement la récompense par bloc est-elle coupée en deux ? C'est dans le code détenu par les nœuds. Ils savent qu'il faut rejeter tout nouveau bloc après 210 000 où un mineur se paie plus de 25 bitcoins. Puis de rejeter tout bloc après 420 000 où un mineur se paie plus de 12,5 bitcoins, et ainsi de suite.

Frais de transaction

Jusqu'à présent, je n'ai montré que des blocs imaginaires avec une seule transaction - la transaction où le mineur reçoit une récompense. C'est ce qu'on appelle la "transaction Coinbase".

Ce n'est pas le nom de la société, Conbase, je veux dire Coinbase. La société s'est nommée d'après la transaction Coinbase, et non l'inverse. Ne vous méprenez pas.

En plus de la transaction Coinbase, il y a des transactions où les gens se paient entre eux. Voici un exemple imaginé :

Je n'ai pas pris la peine de trouver un vrai hachage cette fois-ci (C'est en fait le vrai hachage rapporté dans le bloc 200,001). Le nonce, je l'ai inventé pour le plaisir, mais remarquez qu'un message peut y être intégré.

Le célèbre Satoshis a inclus les mots "Chancellor on Brink of Second Bailout for Banks" dans le premier bloc Bitcoin (The Genesis Block), après le titre du journal du jour.

Le fait est que 132 transactions sont incluses (toutes ne sont pas représentées). Regardez la transaction #132 - 2,3 bitcoins d'une adresse payent 2,1 bitcoins à une autre adresse et aussi à une seconde adresse le montant de 0,1 bitcoin (j'ai utilisé des points pour raccourcir la longueur de l'adresse).

Ainsi, une source de 2,3 bitcoins paie un total de 2,2 bitcoins (2,2 + 0,1 = 2,2). Y a-t-il 0,1 bitcoin manquant ? Non, la différence est réclamée par le mineur, comme je vais l'expliquer.

Le mineur est autorisé à se payer 25 bitcoins comme récompense de bloc (parce que 210 000 blocs ont été passés et que la récompense a été divisée par deux, passant de 50 à 25). Mais si vous regardez, la transaction de Coinbase est de 27,33880022. Les 2,33880022 bitcoins supplémentaires proviennent des 132 autres transactions du bloc - les entrées seront toutes légèrement supérieures au total des sorties. Le mineur peut donc réclamer ce bitcoin "abandonné" comme paiement pour lui-même. Ces transactions sont considérées comme des frais de transaction payés au mineur.

L'espace des blocs est limité. Lorsque Bitcoin était nouveau, les utilisateurs pouvaient envoyer des transactions sans frais et les mineurs incluaient la transaction dans le bloc. Mais aujourd'hui, il y a plus d'utilisateurs et, comme l'accès au bloc suivant est compétitif, les utilisateurs incluent des frais dans la transaction pour inciter le mineur à choisir leur transaction plutôt que celle des autres.

Ainsi, lorsque la récompense du bloc diminue régulièrement, de moitié tous les quatre ans pour finir par être nulle, les mineurs sont toujours payés de cette manière.

Certains ont suggéré qu'un jour, la récompense des mineurs ne sera pas suffisante et entraînera la faillite du bitcoin. Cette crainte a été soigneusement démentie et je ne la répéterai pas ici.

Un bloc peut-il être réécrit ?

C'est extrêmement improbable et il est bon de comprendre pourquoi. Vous comprendrez alors pourquoi les transactions Bitcoin sont immuables (non modifiables).

J'ai expliqué précédemment que le hachage du bloc précédent est inclus dans le bloc actuel. Cela signifie que toute modification des transactions dans un ancien bloc modifie le hachage de ce bloc modifié. Mais ce hachage est enregistré dans le bloc suivant, ce qui signifie que le bloc suivant doit également être mis à jour. Mais si vous modifiez le hachage enregistré dans ce bloc suivant, alors son hachage doit être modifié, et ainsi de suite.

Notez que chaque fois qu'un hachage est modifié, vous perdez tous ces jolis zéros et vous vous retrouvez avec un hachage d'apparence aléatoire - et vous devez refaire tout le travail pour récupérer les zéros. Si vous faites cela pour le bloc que vous avez essayé de modifier, vous devrez alors refaire le travail pour le bloc suivant, et le suivant jusqu'au bloc le plus récent. Vous ne pouvez pas simplement vous arrêter à l'ancien bloc, car les règles du bitcoin sont telles que la plus longue chaîne de blocs constitue le véritable record du bitcoin. Si vous revenez en arrière et modifiez un bloc il y a 10 blocs, vous n'avez plus la plus longue chaîne. Vous devez ajouter 10 blocs supplémentaires, puis un peu plus, car pendant que vous créiez ces 10 blocs, la chaîne réelle est probablement devenue un peu plus longue. Vous devez faire la course pour dépasser la chaîne réelle. Si vous réussissez, alors la nouvelle version devient la version réelle.

Répéter l'effort de hachage collectif du monde entier du bloc édité au dernier bloc est la barrière à l'édition du bitcoin. L'énergie a été dépensée pour créer ces hachages avec tous ces zéros improbables et cette dépense d'énergie doit être répétée pour modifier le bitcoin. C'est pourquoi l'énergie utilisée pour miner le bitcoin n'est pas "gaspillée" ; elle est là pour défendre le bitcoin contre les modifications, pour rendre le grand livre immuable sans avoir besoin de faire confiance à une autorité centrale.

Que se passe-t-il si deux mineurs trouvent un bloc en même temps ?

Cela se produit de temps en temps, et le problème se résout toujours comme suit :

Chaque nœud recevra d'abord l'un ou l'autre des nouveaux blocs quasi-simultanés, l'acceptera et rejettera celui qui arrive quelques instants plus tard. Cela entraîne une division du réseau, mais elle est temporaire.

Pour illustrer, appelons l'un des blocs bleu et l'autre rouge (ils n'ont pas de couleur, soyez indulgent avec moi).

Les mineurs travaillent alors sur le bloc suivant, mais il y aura une division quant au bloc à partir duquel ils étendent la chaîne.

Disons que le mineur gagnant a trouvé un bloc en utilisant la chaîne bleue. Il enverra le nouveau bloc à tous les nœuds et la chaîne la plus longue sera apparente. Les nœuds qui avaient accepté la chaîne rouge vont alors la laisser tomber et adopter la chaîne bleue.

Tous les mineurs qui travaillaient sur la chaîne rouge s'arrêteront et travailleront désormais sur la chaîne la plus longue, à savoir la chaîne bleue. La chaîne rouge est morte.

APPENDICE

Pourquoi un bloc de mineur classé deuxième est invalide

Supposons que le bloc 700 000 vient d'être miné par MINER-A. Trente secondes plus tard, MINER-B a également créé une version différente du bloc 700 000. Lorsque MINER-B diffuse cette version alternative, chaque nœud va la rejeter car il a déjà vu et accepté le bloc de MINER-A. De plus, pendant ces 30 secondes, disons que MINER-C a trouvé le bloc 700 001. Étant donné que le 700 000e bloc concurrent de MINER-B ne prolonge pas la chaîne actuelle (qui va jusqu'à 700 001), il est également rejeté pour cette raison.

Ce qui est encore plus intéressant, c'est que si MINER-B avait travaillé sur le bloc 700 001 au lieu d'une version concurrente de 700 000, ils auraient eu autant de chances de miner un bloc valide 700 001 que de trouver finalement un bloc alternatif 700 000. Donc, dès qu'un mineur voit un nouveau bloc, il devrait concentrer ses efforts sur le bloc suivant.

Si, toutefois, le mineur B a trouvé le bloc 700 000 une seconde après le mineur A, il est possible que certains nœuds voient le bloc de MINER-A en premier tandis que d'autres voient le bloc de MINER-B en premier, en fonction de la situation géographique et de la vitesse d'accès à Internet. Dans ce cas, il y a une bifurcation temporaire, et certains mineurs travailleront à étendre une version tandis que d'autres travailleront à étendre l'autre. Comme expliqué précédemment à l'aide des descripteurs "chaîne bleue" et "chaîne rouge", l'une des versions finira par s'étendre davantage avant l'autre et deviendra la version valide à l'unanimité.


Tips: Arman the Parman Static Lightning Address: dandysack84@walletofsatoshi.com