Blockchain

Block Time und Difficulty

Block Time und Difficulty

In diesem Blog-Post geht es um die Block Time und die Block Difficulty, die auch Mining DIfficulty, Network Difficulty oder einfach Difficulty genannt wird. Sowohl die Block Time (übersetzt: Block Zeit) als auch die Difficulty (übersetzt: Schwierigkeit) unterscheiden sich teils stark zwischen den verschiedenen Blockchains und ist ein entscheidender Faktor für deren Skalierbarkeit – also dafür, wie viele Transaktionen sie in einer bestimmten Zeit durchführen können.

Die Block Time ist der Zeitraum, der zwischen der Fertigstellung zweier Blöcke liegt und der über die Difficulty angepasst wird. Denn wie der Name bereits vermuten lässt, legt die Difficulty fest, wie schwer es ist, einen neuen Block zu erstellen. Um so schwieriger es ist einen Block zu erstellen, desto länger dauert es und somit erhöht sich die Block Time. Die Block Time soll möglichst immer gleich bleiben, weswegen die Difficulty regelmäßig angepasst wird. Auf der Bitcoin-Blockchain liegt die Block Time ungefähr bei 10 Minuten und auf der Ethereum-Blockchain bei 13 Sekunden.

Jetzt müssen wir noch verstehen, was eigentlich die Schwierigkeit bei der Erstellung eines Blocks ist. Falls du bereits unseren Artikel “Was ist ein Block auf der Blockchain?” gelesen hast, dann weißt du, dass jeder Block einen eigenen Hash hat, der eine bestimmte Eigenschaft aufweisen muss (wenn du nicht weißt, was ein Hash ist, kannst du dir unseren Artikel zu diesem Thema anschauen). Vereinfacht gesagt ist solch ein Hash eine Zeichenkette, die auf Basis der Daten des Blocks (z. B. die Transaktionen einer Kryptowährung) generiert wird. 

Das ist zum Beispiel solch ein Hash eines Blocks auf der Bitcoin-Blockchain:

‘00000000000000000009083029797462b8e5587aebb628f9503ed095e361db03’

Ändert sich auch nur eine einzige Information in dem Block, verändert sich auch dieser Hash nahezu vollständig. Wie zuvor erwähnt, hat dieser Hash eine bestimmte Eigenschaft, die wir sogar mit dem bloßen Auge erkennen können; er beginnt nämlich mit sehr vielen (19) Nullen.

Das ist kein Zufall, sondern wird von der Difficulty so festgelegt. Was nämlich bei der Erstellung eines Blocks passiert, ist, dass die sogenannten Miner, die den Hash eines Blocks generieren, solange den Block verändern, bis dieser einen Hash erzeugt, der der Difficulty gerecht wird. In unserem Beispiel musste der Hash also mit 19 Nullen beginnen.

Hier nochmal der gesamte Prozess in Kurzform:

  • Difficulty “sagt”: Der Hash des Blocks xyz muss mit 19 Nullen beginnen.
  • Miner generiert zum ersten Mal den Hash des Blocks und bekommt (zum Beispiel) folgendes Ergebnis:

‘8f434346648f6b96df89dda901c5176b10a6d83961dd3c1ac88b59b2dc327aa4’

  • Da der Hash nicht mit 19 Nullen beginnt, muss der Miner den Block verändern, damit sich auch der Hash verändert. Dazu fügt der Miner dem Block einfach zufällige Zahlen hinzu, bis der Hash des Blocks mit 19 Nullen beginnt.
  • Schließlich, bei der Zahl 1.831.290.420, generiert der Miner den passenden Hash:

‘00000000000000000009083029797462b8e5587aebb628f9503ed095e361db03’

In der Realität ist die Difficulty jedoch keine Angabe über die Anzahl an Nullen eines Hashs, sondern sie ergibt sich aus einer sehr großen Zahl. Diese Zahl ist das sogenannte Target (übersetzt: Ziel). Jetzt ist es wichtig zu verstehen, dass wir einen Hash auch als Hexadezimalzahl interpretieren können, was nichts anderes heißt, als dass ein Hash auch als eine Zahl dargestellt werden kann. Diese Zahl darf nun nicht kleiner sein als das Target.

Das klingt jetzt alles sehr abstrakt, weswegen wir uns nun einmal einen echten Block auf der Bitcoin-Blockchain anschauen, um uns die Verbindung zwischen Difficulty, Target und dem Hash des Blocks zu verdeutlichen:

Hier sehen wir den Hash des Blocks #707291 auf der Bitcoin-Blockchain und dessen Difficulty. Was wir nicht sehen, ist das Target. Wie zuvor erwähnt, ist das Target eine sehr große Zahl und in diesem Fall liegt diese bei 1.3424623522972366e+54. Wie genau das Target des Blocks berechnen kann, schauen wir uns später an.

Wir wissen bereits, dass der Hash des Blocks (als Zahl) kleiner sein muss, als das Target. Also lass uns schauen, ob dies der Fall ist:

Den Hash ‘00000000000000000009083029797462b8e5587aebb628f9503ed095e361db03’ können wir mit einem Hexadezimal-Rechner in eine für uns lesebare Zahl umwandeln und erhalten dabei die folgende Zahl: 8.650922859460584e+53.

Daraus folgt: Hash (8.650922859460584e+53) < Target (1.3424623522972366e+54) und der Block ist somit valide.

Damit können wir uns auch erklären, warum der Hash mit so vielen Nullen beginnt, da er sonst größer wäre als das Target. Würden wir zum Beispiel die erste Null des Hashs gegen eine 1 tauschen, würden wir eine viel größere Zahl bekommen:

‘10000000000000000009083029797462b8e5587aebb628f9503ed095e361db03’

=

7.237005577332262e+75

Was gibt nun die Difficulty an, die wir in unserem Beispiel des Bitcoin-Blocks sehen?

Die Formel zur Berechnung der Difficulty lautet wie folgt:

Difficulty = MAX_TARGET ÷ Target

Das MAX_TARGET ist das höchstmögliche Target und liegt bei der Bitcoin-Blockchain bei 2.695994666715064e+67. Für die Miner ist es umso schwieriger einen Hash unter dem Target zu finden, je kleiner das Target ist (es wird schwieriger, je mehr Nullen der Hash am Anfang haben muss). Deswegen beschreibt das MAX_TARGET die geringste mögliche Schwierigkeit. Da die Difficulty nach der Formel ja das Verhältnis von dem maximalen Target zum aktuellen Target angibt, ist es umso leichter, einen Block zu minen (also einen Hash unter dem Target zu finden) je kleiner dieses Verhältnis, also die Difficulty ist.

kleine Difficulty (also hohes Target)

=

es ist leichter einen passenden Hash (Hash < Target) zu finden

hohe Difficulty (niedriges Target)

=

es ist schwieriger einen passenden Hash zu finden

Quelle: https://www.blockchain.com/charts/difficulty

Auf diesem Chart sehen wir die Veränderung der Difficulty der letzten drei Jahre auf der Bitcoin-Blockchain. Aber warum ändert sich die Difficulty überhaupt?

Wie eingangs erwähnt, soll zwischen der Fertigstellung zweier Blöcke immer die gleiche Zeit liegen. Diese Zeit ist die Block Time und liegt bei Bitcoin bei 10 Minuten. Da sich die Anzahl der Miner (und deren Hardware) über die Zeit verändert, muss sich auch die Difficulty anpassen, da eine größere Anzahl an Minern im Durchschnitt weniger Zeit bei gleicher Difficulty braucht, um einen passenden Hash zu finden als weniger Miner.

Tatsächlich relevant ist jedoch nicht die Anzahl der Miner, sondern die Total Hash Rate. Die Total Hash Rate (TH/s) gibt an, wie viele Hashes alle Miner zusammen pro Sekunde berechnen. Die Logik dabei ist ganz einfach: Je mehr Hashes pro Sekunde berechnet werden, desto weniger Zeit wird gebraucht, um einen passenden Hash zu finden. Deswegen zeigt der Chart der Total Hash Rate der letzten 3 Jahre ungefähr dieselbe Entwicklung wie der Chart der Network Difficulty:

Quelle: https://www.blockchain.com/charts/hash-rate

Bemerkung: Die Total Hash Rate wird nicht als solche aufgezeichnet. Sie lässt sich jedoch mit Hilfe der Difficulty und Block Time realitätsnah berechnen

Auf der Bitcoin Blockchain wird die Difficulty alle 2016 Blocks angepasst. Bei einer perfekten Einhaltung der Block Time (zwischen jedem Block liegen 10 Minuten) würde die Difficulty genau alle 14 Tage angepasst werden bzw. in diesem Idealfall zwar überprüft – jedoch nicht verändert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert