I04 Hash-Schwierigkeitsstufe erhöhen

Die Blockchain in 9 Schritten – Teil 4: Hash-Schwierigkeitsstufe erhöhen

Da die Errechnung eines SHA256-Hashwertes innerhalb von Millisekunden erledigt ist, hat der Erfinder des Blockchain-Konzeptes einen veränderlichen Schwierigkeitsgrad eingebaut, der eine nachträgliche Änderung innerhalb der Blockchain über mehrere Datenblöcke hinweg derart verlangsamt, dass die notwendigen Berechnungen immer der Original-Blockchain hinterherlaufen.

In welcher Form wird nun die Schwierigkeit berechnet bzw. erhöht? Die Antwort ist recht einfach – in dem solange ein Hashwert gesucht wird, bei dem die ersten Stellen mit einer Null beginnen. So kann ein gültiger SHA256-Hashwert mit Schwierigkeitsgrad 4 (bedeutet 4 Nullen am Anfang) so aussehen: „0000ed35a36da547ca146f1be973bbe700c5a21bccd5fee27502e43f8736408a“.

Ich höre schon die Rufe – „ein Hashwert ist eindeutig für einen Datensatz“ und das stimmt auch, nur ist ab sofort der Block-Datensatz um ein Feld reicher: „nonce“. Ebenso ist in der Block-Klasse nun eine zusätzliche Methode namens „mineBlock“, welche für die Generierung eines Hashwertes mit passender Schwierigkeit („difficulty“) sorgt. Das Programm zählt den Wert im feld „nonce“ laufend hoch und errechnet den Hashwert unter Einbezug des „nonce“-Feldes bis die Schwierigkeit erreicht ist.

In der Hauptklasse wird die Schwierigkeit fest mit dem Wert 4 belegt und Ihr solltet diesen Wert sehr langsam auf 5, 6 oder 7 erhöhen. Mit jeder Erhöhung verlangsamt sich die Hashwertberechnung für die Datenblöcke deutlich bis hin zur Unbenutzbarkeit. Ich habe Euch eine Version von Stufe 4 erstellt, in der mehr Datensätze erstellt werden, damit ist der Verlangsamungseffekt besser zu bemerken. Schaut Euch den Unterartikel I04B Hash-Schwierigkeitsstufe erhöhen an.

In der Praxis wird bei „echtem“ Krypto-Geld die Schwierigkeit automatisch an die verfügbare Rechengeschwindigkeit angepasst, so dass nur etwa alle 10 Minuten ein neuer Datenblock für die Bitcoin-Währung gefunden wird. Werden die Rechner schneller, erhöht sich auch der Schwierigkeitsgrad und die Berechnung dauert wieder 10 Minuten.

Fangen wir mit Quellcode der Klasse „Block“ an, gefolgt von den Klassen „StringUtil“ und „BlockChain“:

Die Konsole gibt dieses Ergebnis aus:

Weiter geht es mit Teil 5: I05 Erstellung eines Wallets.

Alle Quellcodes zur Blockchain findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/I-Blockchain. Alle Programme sind sowohl unter Java 8 als auch unter Java 11 lauffähig.

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 28.05.2019