Comment est calculée la difficulté ? : Échange de pile Bitcoin
La réponse de Meni est bonne. Je veux juste donner quelques détails pratiques sur le calcul de la difficulté, peut-être utile pour les vues futures de la réponse à cette question.
Jetons un coup d’œil à l’en-tête du bloc de genèse de Satoshi (partie des informations connexes) :
$ bitcoin-cli getblockhash 0
$ bitcoin-cli getblockheader
« hauteur » : 0,
« bits » : « 1d00ffff »,
« difficulté » : 1,
le bloc de genèse a une difficulté ‘1’ et des bits ‘1d00ffff’. Les bits bitcoin signifient la valeur de hachage ‘cible’, le nouveau bloc généré doit remplir une condition : la double valeur de hachage SHA-256 de l’en-tête du bloc doit être inférieure à cette valeur ‘cible’.
La valeur des bits ‘1d00ffff’ dans le bloc Genesis signifie la valeur ‘cible’ :
Ensuite, pour trouver un nouveau bloc, vous devez rechercher cette valeur nNonce de 32 bits (et nTimes et le hashMerkleRoot également) jusqu’à ce que la valeur de hachage du bloc ait 4 octets à zéro en tête.
Soit dit en passant, le nNonce est l’un des champs de la structure d’en-tête de bloc :
// 4 versions
// 32 hachage d’en-tête de bloc précédent
// 32 hachage racine merkle
// 4 fois
// 4 cibles
// 4 nonce
Étant donné que l’algorithme SHA-256 (ainsi que tout algorithme de hachage sécurisé cryptographiquement) produit une sortie qui apparaîtra comme une séquence uniformément aléatoire, la méthode pratique « essais et erreurs » est le seul moyen de trouver un nouveau bloc pour répondre à la condition. La probabilité de trouver un bloc avec la valeur de hachage principale zéro de 4 octets est de 1/(2^32), ce qui signifie que les nombres moyens d' »essais et erreurs » sont exactement de 2^32 (c’est-à-dire 4G).
qui signifie les nombres moyens « d’essais et d’erreurs » pour trouver un bloc répondant à la condition « cible »
1 ‘difficulté’ = hachages 4G
Ensuite, jusqu’à aujourd’hui, la hauteur de la blockchain bitcoin atteint 501509, jetons un coup d’œil à son en-tête :
$ bitcoin-cli getblockheader
« hauteur » : 501509,
« bits » : « 18009645 »,
« difficulté » : 1873105475221.611,
Les bits du bloc 501509 = 0x18009645, c’est le format compact d’entier 256 bits, son format 256 bits est :
c’est 0x009645 * (256 ^ 21)
La cible du bloc de genèse est (0x00ffff * 256 ^ 26 )qui est l’unité de difficulté ‘1.0’.
Alors, la difficulté
= (0x00ffff * 256 ^ 26)/ (0x009645 * 256 ^ 21)
= 65535/38469 * (256^5)
= 1.703579505575918 * 2^40
= 1873105475221.611
Jusqu’à présent, vous avez tous les détails sur la façon de calculer la « difficulté ».
7T pour dire la difficulté, dans l’exemple ci-dessus:
(1.703579505575918 * 2^40) = 1.703579505575918T
1T = 2^40 = 1024^4