Hashing-Daten blockieren

Leute, ich habe ein paar Punkte, die mir nicht klar sind. 1) In dem Link unten heißt es, dass es einige Felder gibt, die wir kombinieren und hashen müssen. Wenn ich jedoch eine Arbeit bekomme, indem ich Getwork aus einem Pool sage. Was ich bekomme, steht auch unten. Das Problem ist, dass ich die im ersten Link aufgeführten Felder, Version, hashPrevBlock usw., nicht finden kann.

https://en.bitcoin.it/wiki/Block_hashing_algorithm

Holen Sie sich das Ergebnis.

{   'data':'0000000271112b7a1cf8e97b8367102f7e155499bf5c7303cbcdd4360000000000000000427719b35a84bc7732edd34ff3a6278dc4ac0ec2a9544e6088bc0bd719e17a8e52db3b211902666600000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000',
'hash1':'00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000',
'target':'0000000000000000000000000000000000000000000000000000ffff00000000',
'midstate':'45aebb01c0fdb704ee7d2bbf02665943f50f299ff8bb252e614100065bc5c20c'
}

2) Im ersten Link heißt es: "Immer wenn Nonce überläuft (was häufig der Fall ist), wird der extraNonce-Teil der Generierungstransaktion erhöht, wodurch die Merkle-Wurzel geändert wird." Sollte ich zusätzliche 32 Bits für Extranonce setzen?

3) Was ist der Grund für die Umkehrung des Headers?

Antworten (1)

  1. Der Link, den Sie gepostet haben, bezieht sich auf den vollständigen Mining-Prozess, den Sie benötigen würden, wenn Sie einen ASIC oder eine andere Hardwarelösung verwenden, die 4 Gigahashes oder mehr pro Sekunde erzeugen kann. Wenn Sie verwenden getwork, sind die meisten dieser Informationen irrelevant und verwirrend.

  2. siehe (1) oben. Sie müssen sich keine Gedanken über extraNonce machen, wenn Sie getwork verwenden; Sie können einfach getworkerneut anfordern und eine neue dataZeichenfolge vom Server erhalten.

  3. Der Grund für die Umkehrung des Headers (das eigentliche Umkehren jedes 32-Bit-Wortes im Header) ist, dass er bereits umgekehrt (in Little-Endian konvertiert) wurde , bevor Sie ihn an Sie senden, und Sie müssen diese Umkehrung rückgängig machen und ihn wieder groß schreiben -endian-Form.

Alles, was Sie tun müssen, wenn Sie getwork verwenden, ist:

  • Konvertieren Sie die datain Big-Endian
  • Holen Sie sich den sha256-Hash des sha256-Hashs des 80-Byte-Headers
  • Wenn dieser Hash unter dem Schwellenwert liegt, senden Sie Ihren Header mit dem aktuellen Nonce an den Server, indem Sie den entsprechenden getworkRPC-Aufruf mit Daten verwenden
  • versuchen Sie es jedes Mal erneut mit verschiedenen Nonces (die letzten 4 Bytes der 80 Bytes sind die Nonces)
Sie meinen, das Einzige, was mich interessiert, sind die letzten 4 Bytes der Daten, oder? Aber wessen letzte Bytes, das Little-Endian oder das andere? :)
es ist wirklich egal. Normalerweise, zumindest auf x86-Computern, erhöhen die Leute die Little-Endian-Zahl und konvertieren dann den Block zum Hashen in Big-Endian. Ich verwende nur Zufallszahlen, also könnte ich mich nicht weniger um Endianness kümmern; Sie müssen nur sicherstellen, dass Sie es in der richtigen Reihenfolge für die Übermittlung an den Server platzieren.
Denken Sie daran, es sind in jedem Fall die gleichen 4 Bytes; Sie kehren die 80 Bytes nicht um, Sie kehren alle 4 Bytes innerhalb der 80 Bytes um, sodass 0x12345678 zu 0x78563412 wird.
Im Beispiel von 0x12345678 kehren Sie alle 1-Byte-Blöcke innerhalb eines 4-Byte-Werts um, richtig? 0x12345678 = 00010010-00110100-01010110-01111000. 0x78563412 = 01111000-01010110-00110100-00010010
ja, das ist die idee.