Wie setze ich Attribute für Block-Hash und nBits in PIVX Fork richtig?

Ich habe PIVX (im Grunde eine DASH-Gabel) geklont und grundlegende Parameter geändert. Es lässt sich gut kompilieren. Wenn ich versuche, es auszuführen, startet der Server und die Debug-Protokolldatei zeigt folgende Fehler:

FEHLER: CheckProofOfWork(): Hash stimmt nicht mit nBits überein
FEHLER: CheckBlockHeader(): Arbeitsnachweis fehlgeschlagen
FEHLER: CheckBlock(): CheckBlockHeader fehlgeschlagen

Um meinen Genesis-Block zu generieren, habe ich die folgenden Parameter geändert:

  • pszTimestamp : Verwendet eine zufällige neueste Nachricht.
  • vAlertPubKey : Verwendet den Alarmschlüssel aus Generierungsbefehlen, die in diesem Pastebin-Link erwähnt werden .
  • scriptPubKey : Verwendet das Genesis - Hex aus Generierungsbefehlen , die in diesem Pastebin - Link erwähnt werden .

  • genesis.nTime : Letzten Unix-Zeitstempel erhalten.

  • genesis.nNonce : Erhalten vom Genesis - Blockerstellungsalgorithmus , der in diesem Pastebin - Link erwähnt wird .

Ich konnte erfolgreich neuen Genesis-Hash sowie Merkle-Root generieren. Aber nach dem Kompilieren erhalte ich den obigen Fehler.

Ich habe versucht, im Internet nach der Lösung zu suchen, aber die meisten hatten keine konkreten Antworten oder überhaupt keine Antworten außer dieser .

Es erklärt, dass der Hash meines Genesis-Blocks größer ist als der Ziel-Hash, der mit nBitsder Variable erhalten wird. Meine Frage ist also, wie stelle ich sicher, dass mein Genesis-Hash kleiner als der Ziel-Hash ist, um die genannten Fehler zu beseitigen?

Antworten (1)

Ich habe die Antwort gefunden. Bitte korrigieren Sie mich jedoch, wenn ich das falsch erkläre.

Sobald wir Eingaben für den Block haben, hashen wir die Daten. Dieses Hashing kann mit mehreren Techniken erreicht werden, nämlich. SHA256, Verschlüsselung, X11 usw.

Das Problem beim Generieren eines Hashs für die Genesis war, dass ich den Verschlüsselungsalgorithmus verwendet habe, um den Hash zu generieren. Bei dieser Methode können Sie auf Bin-Links stoßen scrypt_1024_1_1_256_sp_sse2.

In meinem Fall habe ich dies also durch die von der uint256Klasse angebotene Methode ersetzt. Sie finden diese Genesis-Erstellungslogik in diesem Pastebin .

Fühlen Sie sich frei, etwas hinzuzufügen oder mich zu korrigieren, wenn ich falsch liege.