stratum : Comment dois-je classer les données d'en-tête de bloc dans les messages avec pool ?


Tout d'abord, je crée cet article pour le bénéfice de tous ceux d'entre vous qui souhaitent vraiment comprendre et construire leur propre mineur à partir de zéro. Il y a tellement de matériaux mais ils ont rarement quelque chose en commun.

Certains développeurs inversent le hachage du pool et retournent même les octets  :

hex2byte(ph, pb); revFlip(bp);

D'autres copient simplement la solution wiki Bitcoin, sans remarquer que le hachage précédent, par exemple, est inversé par rapport à ce que fournit le pool de minage.

stratum : Comment dois-je classer les données d'en-tête de bloc dans les messages avec pool ?

$prevBlockHash = SwapOrder(''); $rootHash = SwapOrder(''); $

ntime, version – mais c'est déjà inversé depuis la piscine, non ?

La question est donc :

Lorsque je parle avec le pool, comment dois-je organiser mes données pour l'en-tête du bloc, afin d'être prêtes à être comparées avec la cible après le hachage ?

Ceci est si crucial que toute erreur commise ici amènera le ou les mineurs à calculer des hachages pour des choses qui ne sont pas pertinentes, ne trouvant ainsi jamais de « occasion » valide – c'est tellement de gaspillage et devrait vraiment être clarifié.

notify »

«  »

Le pool envoie le hachage précédent sous la forme , donc certaines parties sont déjà inversées (mais cela n'indique nulle part ce qui est inversé et pourrait être utilisé tel quel).

Donc, sur la base des détails ci-dessus, passons à ma façon de penser sur la façon de construire correctement l'en-tête.

CONSTRUCTION (CONCATENER)

  • Ne pas inverser la version du pool 20000000
  • bitcoin/li>

  • Dhash le merkle et inversez-le
  • Ne pas inverser le temps depuis le pool 662685b8
  • Ne pas inverser les nbits du pool 17034219
  • /li>

    Et le résultat que je génère est  :

    Coinbase1 : Coinbase2 : 0 Extranonce1 : 5324fa6e Extranonce2 : 000000008f6bc892 Extranonce2 taille : 8 Merkle 0 : c7475d794e5 Merkle 1 : Merkle 2 : 5ae42d65 Merkle 3 : Merkle 4 : a16827ebd567 Merkle 5 : Merkle 6 : a89f36662839 Merkle 7 : Merkle 8 : Merkle 9 : 1d7f Merkle 10 : Merkle 11 : a62dee84 Version : 536870912 / 20000000 Merklehash : ntime : 662685b8 / 662685b8 nbits : 170 34219 / 17034219 Nonce  : 00 Pré-hash du bloc  : En-tête de bloc  : Hachage de bloc (inversé) : Cible (inversée) :

    en-tête avec SHA256

    HACHAGE

    COMPARER Mais c'est une autre histoire.

    Merci d'avance, toute aide ici est appréciée car j'ai vu de nombreuses implémentations de différents mineurs, et la majorité d'entre eux font les choses différemment – même s'ils travaillent avec le même pool.