blockchain : Quelles sont les équations à convertir entre bits et difficulté ?


Il existe 3 représentations de la même chose (avec des degrés de précision variables) dans Bitcoin  :

  • bits – entier non signé 32 bits
  • cible – entier non signé 256 bits
  • difficulté – flottant double précision (64 bits)

et 6 méthodes sont nécessaires pour convertir entre deux d’entre elles  :

    cpp)

  • bits -> difficulté (GetDifficulty() dans bitcoin/src/rpc/blockchain.cpp)
  • cpp)

  • cible -> difficulté (identique à cible -> bits -> difficulté)
  • difficulté -> bits (pas fait en bitcoin/src)
  • difficulté -> cible (identique à difficulté -> bits -> cible)

mais ne peut pas effectuer la conversion de difficulté -> bits comme également demandé dans la question.

blockchain : Quelles sont les équations à convertir entre bits et difficulté ?

J’ai écrit ma propre implémentation de la difficulté -> conversion de bits en Javascript vanille en imitant la cible -> conversion de bits lorsque cela est possible, plus quelques vérifications supplémentaires  :

0) throw ‘la difficulté ne peut pas être négative’ pow(0x100 // convertir en int < 0xffffff var size = 0x1d taille++  = 0) throw 'le \'bits\' \'word\' est hors limites' ; if (size > 0xff) throw ‘le \’bits\’ \’size\’ est hors limites’ ; var bits = (taille difficulté -> bits

La seule exception est lorsque (bits & 0x00800000) ! = 0, car cela signifie que bits est un nombre négatif, alors que la difficulté est toujours un nombre positif dans Bitcoin.

null.place/how-do-the-bitcoin-mining-algorithms-work/#form7

cpp et bitcoin/src/test/.cpp sur le blog juste en dessous de l’outil susmentionné – tous les tests réussissent.