Preuve de travail en Bitcoin  : aucun nombre à virgule flottante utilisé

  • Preuve de travail en Bitcoin : processus sans nombre à virgule flottante
  • Cible vs difficulté : ajustement pour maintenir une constante de 10 minutes/bloc
  • Ajustement de la difficulté : toutes les deux semaines pour contrôler la vitesse du minage
  • Zéros de tête : approximation utilisée dans le livre blanc, mais pas nécessaire dans le code

Cet article a été publié pour la première fois sur Medium.

Nous expliquons comment fonctionne la preuve de travail (PoW) dans Bitcoin.

Preuve de travail

Le cœur du processus PoW (Proof of Work) consiste à trouver un hachage inférieur à une valeur cible définie par le réseau. La fonction de hachage utilisée par Bitcoin est le double SHA-256, qui produit une valeur de hachage de 256 bits. Les mineurs génèrent des valeurs de hachage en combinant les informations d'en-tête de bloc avec le nom occasionnel et en les transmettant via la fonction de hachage. Étant donné que le résultat de la fonction de hachage est imprévisible, les mineurs devinent essentiellement différentes valeurs occasionnelles jusqu'à ce qu'ils en trouvent une qui produit un hachage inférieur à la valeur de hachage. cible valeur. Ce processus nécessite une puissance de calcul importante et est appelé minage.

Preuve de travail en Bitcoin  : aucun nombre à virgule flottante utilisé

Cible vs difficulté

Le cible est un entier de 256 bits dont tous les mineurs de Bitcoin cherchent à trouver une valeur de hachage ci-dessous. Les blocs valides doivent avoir un hachage inférieur à cette cible. 256 bits signifie qu'il est extrêmement volumineux et peut représenter une vaste plage de valeurs. Cette granularité permet des ajustements précis à la difficulté de minage du réseau.

Le réseau Bitcoin présente une difficulté de blocage globale.

L'objectif est inversement lié à la difficulté de minage. Un objectif inférieur signifie une difficulté plus élevée, car il y a moins de valeurs de hachage possibles répondant aux critères. À l’inverse, une cible plus élevée augmente la plage de valeurs de hachage considérées comme valides, réduisant ainsi la difficulté.

Ajustement de la difficulté

La difficulté du puzzle Proof of Work s'ajuste environ toutes les deux semaines pour maintenir un temps de blocage constant d'environ 10 minutes, quelle que soit la quantité de puissance de calcul du réseau.

Tous les blocs de 2016, le réseau Bitcoin calcule le temps nécessaire pour extraire les derniers blocs de 2016. Il compare ensuite cette durée à la période souhaitée de 20 160 minutes (2 016 blocs * 10 minutes par bloc). Si le temps réel est inférieur au temps souhaité, cela signifie que les blocs sont extraits trop rapidement et que la cible diminue (difficulté croissante). À l’inverse, si le temps réel est supérieur, indiquant que les blocs sont extraits trop lentement, la cible augmente (difficulté décroissante).

Comment l’objectif est-il mis en œuvre ?

Dans l’en-tête du bloc Bitcoin, une forme compacte de 32 bits est stockée (appelée « Bits »), et non la cible complète de 256 bits. Il économise de l'espace et facilite le travail et la transmission sur le réseau.

Bits n'est qu'une version abrégée/compacte de la cible. Cela fonctionne comme la notation scientifique, sauf qu'il utilise la base 256 au lieu de la base 10.

Il est essentiellement divisé en deux parties  :

  • Exposant: Cela vous donne la taille de la cible en octets
  • Mantisse : Cela vous donne les 3 octets initiaux de la cible
  • Par exemple, si Bits est égal à 0x1810696F4, vous calculerez la cible comme ceci  :

    Zéros de tête

    Dans le livre blanc, les « zéros non significatifs » sont utilisés comme moyen de comprendre intuitivement la recherche d'un hachage valide en dessous du seuil cible.

    Section 4 du livre blanc BitcoinDans le code, cependant, le véritable critère pour un hachage de bloc valide est qu'il ne doit pas dépasser une valeur cible spécifique. Compter les zéros non significatifs n'est donc qu'un approximationpuisque le hachage vers un certain nombre de bits zéro en tête n'est qu'une condition nécessaire, mais pas suffisante, pour qu'un hachage de bloc soit valide.

    Fonction CheckBlock

    Pour comprendre pourquoi, considérons que la cible ci-dessus est affichée sous la forme de 32 octets complets (512 bits) au format hexadécimal ci-dessous, avec des zéros précédents.

    Cible  : hachage de bloc hypothétique suivant n'est pas valide, il ne diffère de la cible que dans le dernier octet (0x01 vs 0x00). Même s'il comporte le même nombre de zéros non significatifs que la cible, il est plus grand et donc invalide.

    Hachage de bloc  : de nombres à virgule flottante

    Un nombre à virgule flottante est un moyen de représenter des nombres réels en informatique pouvant prendre en charge une très large plage de valeurs. Le terme « virgule flottante » vient du fait que la virgule décimale peut « flotter » ; c'est-à-dire qu'il peut être placé n'importe où par rapport aux chiffres significatifs du nombre. Des exemples de flottants sont 0,1243 et 12,245.

    Dans les composants critiques du Bitcoin, tels que l'ajustement de la difficulté ou la comparaison des valeurs de hachage, les représentations à virgule flottante sont évitées car elles peuvent se comporter de manière incohérente selon les différentes architectures informatiques. Cette incohérence résulte des différences d'arrondi potentielles inhérentes à l'arithmétique à virgule flottante, qui peuvent conduire à des résultats non déterministes. Étant donné que les règles de consensus de Bitcoin exigent un déterminisme complet pour garantir que tous les participants soient d'accord sur l'état de la blockchain, le système s'appuie sur des types de données et des opérations qui donnent le même résultat sur n'importe quelle machine, excluant ainsi les nombres à virgule flottante en raison de leur perte de précision et erreurs d'arrondi. Au lieu de cela, des nombres entiers sont utilisés.

    Transcription non officielle du procès  : AB est Adam BackDans le procès COPA c. Wright, le témoin de la COPA, Adam Back, affirme que le code Bitcoin utilise la virgule flottante dans PoW. C'est manifestement FAUX. Tous les nombres dans PoW, cible et Bits, sont représentés sous forme d'entiers. Aucune arithmétique à virgule flottante n'est utilisée. Il convient de noter que la difficulté pas apparaître dans le code. Il s'agit d'une mesure dérivée de la cible.

    Regarder  : Pourquoi la preuve de travail est le modèle de consensus le plus sûr

    Nouveau sur la blockchain ? Consultez la section Blockchain pour les débutants de CoinGeek, le guide de ressources ultime pour en savoir plus sur la technologie blockchain.