Benötigen Sie bei der Berechnung des Hashs nach der Anzahl der Schwierigkeitsbits noch etwas?

Ich werde hier eine Menge der Terminologie vermasseln. Ich versuche, den Bitcoin-Algorithmus zu verstehen und wollte diesen JS-Miner verwenden – https://github.com/howardchung/jsminer . Insbesondere versuche ich zu verstehen, wie man die Daten erstellt, die jemand zu hashen versucht. Sie versuchen dies im JS-Miner wie folgt zu tun

    var header = version + prevhash + merkle_root + ntime + nbits + '00000000' + '000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000';
    curr_block.data = header;

Ich verfolge das meiste davon und verwende das Bitcoin-Wiki als Referenz, aber was ich überhaupt nicht herausfinden kann, ist, was diese letzten beiden numerischen Konstanten sind – „00000000“ und die größere, die mit „0000008“ beginnt. Ich habe gesehen, dass diese in anderen Beispielen auftauchen, aber ich kann nicht herausfinden, warum diese benötigt werden oder ob es sich um hartcodierte Werte im JS-Miner handelt, die im wirklichen Leben nicht vorhanden sein sollten. Jede Hilfe ist willkommen.

Antworten (1)

Die erste 00000000ist für die Nonce. Die Nonce wird geändert, um einen anderen Blockheader zu erhalten, ohne Transaktionen erneut auszuwählen. Es wird hauptsächlich verwendet, um einen gültigen Block-Hash zu finden.

Die lange Zeichenfolge, die mit beginnt, 0000008ist SHA-256-Padding. Es ist nicht wirklich Teil des Blockheaders und was auch immer das SHA-256-Hashing tut, sollte dieses Padding für Sie herausfinden und anhängen. Es ist Teil des Vorverarbeitungsschritts für SHA-256.

Ja, ich habe dieses Fragment aus dem Abschnitt des Codes gezogen, in dem sie diese Vorverarbeitung durchführen. Da die Zeichenfolge, die mit "0000008" beginnt, aufgefüllt wird, kann es irgendetwas sein? Muss es diese bestimmte Reihenfolge sein?
Ja. Die Polsterung ist fest und muss für alle Blöcke gleich sein. Es sollte wirklich dynamisch von der SHA-256-Funktion berechnet werden, anstatt etwas, das Sie fest codieren.
Um Ihr "Ja" zu verdeutlichen, meinen Sie "Ja, es kann alles sein" oder "Ja, es muss diese bestimmte Sequenz sein"?
Ja, es muss diese bestimmte Sequenz sein.