Was ist die Difficulty?
Die Difficulty beschreibt, wie schwer es aktuell ist, einen gültigen Proof-of-Work für einen neuen Block zu finden.
Sie bestimmt, wie viel Arbeit Miner durchschnittlich leisten müssen, bevor ein gültiger Block entsteht.
Technisch wird dies über das aktuelle Target festgelegt. Je kleiner das Target, desto weniger gültige Hashes existieren und desto mehr Hashversuche sind erforderlich.
Die Difficulty wird regelmäßig an die weltweite Hashrate angepasst. Dadurch entstehen neue Blöcke langfristig weiterhin mit einer durchschnittlichen Blockzeit von etwa zehn Minuten.
Difficulty · Live
LiveQuelle: BitcoinVonInnen Node
Lade …
Warum gibt es die Difficulty?
Proof-of-Work koppelt die Entstehung neuer Blöcke an reale Arbeit.
Dadurch entstehen regelmäßige Ordnungsfenster, die dem Netzwerk Zeit geben, Informationen auszutauschen, Transaktionen zu validieren und sich auf einen gemeinsamen Zustand zu synchronisieren. Damit diese Ordnungsfenster ihre Funktion erfüllen können, muss die durchschnittliche Blockzeit langfristig ungefähr konstant bleiben.
Genau dafür existiert die Difficulty. Ohne Difficulty würde die Blockzeit direkt von der weltweiten Hashrate abhängen. Steigt die verfügbare Rechenleistung, würden Blöcke immer schneller gefunden werden. Sinkt die Rechenleistung, würden Blöcke entsprechend langsamer entstehen.
Die Blockzeit würde dadurch ständig schwanken. Die geplante Ausgabe neuer Bitcoins wäre nicht mehr vorhersehbar und die durch Proof-of-Work geschaffenen Ordnungsfenster würden ihre feste zeitliche Struktur verlieren.
Bitcoin passt deshalb die Difficulty regelmäßig an die beobachtete Blockzeit an. Steigt die weltweite Rechenleistung, erhöht das Netzwerk die Difficulty. Sinkt die Rechenleistung, wird die Difficulty reduziert. Dadurch bleibt die durchschnittliche Blockzeit langfristig bei etwa zehn Minuten.
Hashrate und Blockzeit
Mehr Hashrate bedeutet mehr Hashversuche pro Sekunde. Dadurch steigt die Wahrscheinlichkeit, einen gültigen Blockhash zu finden, und neue Blöcke werden im Durchschnitt schneller gefunden. Sinkt die Hashrate, werden entsprechend weniger Hashversuche durchgeführt und die durchschnittliche Blockzeit steigt.
Bitcoin misst jedoch nicht die weltweite Hashrate direkt. Stattdessen beobachtet das Netzwerk, wie schnell die letzten Blöcke tatsächlich gefunden wurden. Liegt die durchschnittliche Blockzeit unter zehn Minuten, erhöht Bitcoin die Difficulty. Liegt sie darüber, wird die Difficulty reduziert.
Die Difficulty reagiert dabei nicht sofort auf Veränderungen der Hashrate. Zwischen zwei Anpassungen bleibt das Target unverändert. Steigt die Hashrate plötzlich an, entstehen daher zunächst schnellere Blöcke. Sinkt die Hashrate, werden Blöcke zunächst langsamer gefunden. Erst bei der nächsten Difficulty-Anpassung wird das Target entsprechend korrigiert.
Warum wird die Difficulty angepasst?
Die Difficulty dient nicht dazu, Bitcoin automatisch sicherer zu machen. Ihre eigentliche Aufgabe besteht darin, die durchschnittliche Blockzeit trotz schwankender Hashrate bei etwa zehn Minuten zu halten.
Block 2.016 · Epoche 0/2016 · Beobachtete Blockzeit 10.0 Min. · Hashrate 1.00× · Difficulty 1.00× · Anpassung in 2016 Blöcken
- Hashrate
- Beobachtete Blockzeit
- Difficulty
- 10 Minuten Zielwert
Orange: Durchschnittliche Blockzeit der letzten 2016 Blöcke. Dieser Wert wird für die Difficulty-Anpassung verwendet und nähert sich langfristig dem Zielwert von 10 Minuten an.
Mehr Hashrate verkürzt die Blockzeit sofort. Die Difficulty folgt erst nach 2016 Blöcken der beobachteten Blockzeit.
Hashrate stabil → beobachtete Blockzeit nahe 10 Minuten → Difficulty bleibt im Gleichgewicht.
Die Difficulty-Anpassung
Bitcoin passt die Difficulty nicht nach jedem Block an.
Stattdessen betrachtet das Netzwerk immer Zeiträume von 2016 Blöcken. Dieser Zeitraum wird als Difficulty-Epoche bezeichnet.
Bei einer Ziel-Blockzeit von zehn Minuten sollten 2016 Blöcke ungefähr dauern:
Nach jedem Block 2016, 4032, 6048 usw. vergleicht Bitcoin die tatsächlich benötigte Zeit mit dieser Sollzeit von 14 Tagen.
Blöcke wurden zu schnell gefunden
Angenommen, die letzten 2016 Blöcke wurden bereits nach 10 Tagen gefunden.
Dann waren die Miner im Durchschnitt schneller als vorgesehen.
Bitcoin erhöht deshalb die Difficulty um den Faktor 1,4.
Dadurch wird es schwieriger, einen gültigen Blockhash zu finden.
Blöcke wurden zu langsam gefunden
Wurden die letzten 2016 Blöcke stattdessen erst nach 20 Tagen gefunden, ergibt sich:
Bitcoin reduziert deshalb die Difficulty auf 70 % des bisherigen Werts.
Dadurch werden gültige Blockhashes wieder leichter gefunden.
Difficulty und Target
Bitcoin speichert keine Difficulty im Blockheader.
Stattdessen verwendet das Protokoll einen Grenzwert, das sogenannte Target.
Ein Block ist nur gültig, wenn sein Blockhash kleiner oder gleich diesem Target ist.
Je kleiner das Target, desto schwieriger wird es, einen gültigen Blockhash zu finden.
Vereinfachtes Beispiel
Angenommen, Hashes könnten nur Werte zwischen 0 und 999 annehmen.
Großes Target:
Target = 500Gültig wären dann alle Hashes:
0 bis 500Also:
501 gültige WerteKleines Target:
Target = 100Gültig wären nur noch:
0 bis 100Also:
101 gültige WerteDas kleinere Target macht die Suche deutlich schwieriger, weil weniger gültige Ergebnisse existieren.
Target 500
↓
Viele gültige Hashes
↓
Niedrige Difficulty
Target 100
↓
Wenige gültige Hashes
↓
Hohe DifficultyZusammenhang zwischen Difficulty und Target
Die Difficulty ist lediglich eine andere Darstellung des Targets.
Deshalb bewegen sich beide Werte immer in entgegengesetzte Richtungen:
Target ↓
Difficulty ↑
Target ↑
Difficulty ↓Reales Beispiel: Block 825.000
Im Header von Block 825.000 steht im Feld
Bits (nBits):
0x1703d869Daraus berechnet jede Node das aktuelle Target:
00000000000000000003d8690000000000000000000000000000000000000000Die Difficulty ergibt sich anschließend aus dem Verhältnis zwischen dem maximal möglichen Target (Difficulty 1) und dem aktuellen Target:
Für Block 825.000 ergibt sich:
00000000ffff0000000000000000000000000000000000000000000000000000dieselbe 256-Bit-Zahl als Dezimalzahl
26.959.535.291.011.309.493.156.476.344.723.991.336.010.898.738.574.164.086.137.773.096.96000000000000000000003d8690000000000000000000000000000000000000000dieselbe 256-Bit-Zahl als Dezimalzahl
368.311.566.122.123.513.513.592.411.007.997.767.500.471.904.222.838.784Das entspricht gerundet:
nBits
0x1703d869
↓
Target
00000000000000000003d8690000000000000000000000000000000000000000
↓
Difficulty
73.197.634.206.448,34Warum dieses Max Target?
Die Difficulty wird relativ zu einem festen Referenzwert berechnet:
Doch warum verwendet Bitcoin ausgerechnet dieses Max Target?
00000000ffff0000000000000000000000000000000000000000000000000000Der Wert stammt direkt aus dem ursprünglichen Bitcoin-Protokoll.
Im Genesis-Block verwendete Satoshi das Feld Bits (nBits)
mit dem Wert:
0x1d00ffffDaraus ergibt sich das Target:
00000000ffff0000000000000000000000000000000000000000000000000000Dieses Target entsprach der ursprünglichen Schwierigkeit des Netzwerks.
Später wurde genau dieser Wert als Referenz für die Difficulty beibehalten.
Difficulty 1
Wird das aktuelle Target mit diesem ursprünglichen Target verglichen, erhält man:
Die Difficulty beträgt dann genau:
Deshalb entspricht das Max Target immer einer Difficulty von 1.
Warum kann das Target nicht größer werden?
Ein größeres Target würde mehr gültige Blockhashes erlauben und das Mining weiter vereinfachen.
Bitcoin begrenzt das Target deshalb auf den ursprünglichen Wert aus dem Genesis-Block.
Current Target ≤ Max TargetKein Block darf ein Target verwenden, das größer als dieses Max Target ist.
Genesis-Block
Difficulty = 1
↓
Block 825.000
Difficulty = 73.197.634.206.448,34Die eigentliche Formel
Bisher haben wir die Anpassung über die Difficulty beschrieben.
Tatsächlich arbeitet Bitcoin intern jedoch nicht direkt mit der Difficulty, sondern mit dem Target.
Nach jeder Difficulty-Epoche berechnet Bitcoin zunächst ein neues Target:
Für Bitcoin beträgt die Sollzeit einer Difficulty-Epoche immer 14 Tage:
Dadurch ergibt sich unmittelbar:
- Werden Blöcke schneller gefunden als vorgesehen, sinkt das Target.
- Werden Blöcke langsamer gefunden als vorgesehen, steigt das Target.
Blöcke zu schnell
↓
Target sinkt
↓
Weniger gültige Blockhashes
↓
Difficulty steigtBlöcke zu langsam
↓
Target steigt
↓
Mehr gültige Blockhashes
↓
Difficulty sinktDie bekannte Difficulty ergibt sich anschließend aus dem Verhältnis zwischen Max Target und aktuellem Target:
Da die Difficulty umgekehrt proportional zum Target ist, folgt daraus:
Das Näherungszeichen entsteht, weil Bitcoin das neue Target im Feld nBits speichert und
dabei Rundungen auftreten können.
Reales Beispiel aus dem Bitcoin-Netzwerk
Betrachten wir die Difficulty-Epoche 410 zwischen Block 824.544 und Block 826.559.
Nach Abschluss dieser 2016 Blöcke berechnet Bitcoin ein neues Target, das ab Block 826.560 gültig wird.
Bitcoin betrachtet dafür nicht jeden einzelnen Block der Epoche, sondern lediglich die Zeitstempel des ersten und letzten Blocks.
Block 824.544 → Timestamp 1704501692
Block 826.559 → Timestamp 1705760375Die tatsächlich benötigte Zeit beträgt:
Die Sollzeit einer Difficulty-Epoche beträgt:
Bitcoin berechnet daraus den Anpassungsfaktor:
Altes Target
Im letzten Block der Epoche steht:
nBits = 0x1703d869Daraus ergibt sich das Target:
00000000000000000003d8690000000000000000000000000000000000000000Als Integer:
Neues Target
Bitcoin berechnet:
Beim Speichern als nBits rundet Bitcoin den berechneten Wert auf das kompakte Format. Ab Block 826.560 gilt deshalb:
nBits = 0x1704005aDaraus ergibt sich das Hex-Target:
00000000000000000004005a0000000000000000000000000000000000000000Difficulty vor der Anpassung
Bitcoin berechnet die Difficulty aus dem Verhältnis von Max Target zu aktuellem Target.
Max Target:
00000000ffff0000000000000000000000000000000000000000000000000000Als Integer:
Alte Difficulty:
Difficulty nach der Anpassung
Neue Difficulty:
Die Difficulty sank damit um etwa 3,9 %.
Da das Target größer geworden ist, existieren nun wieder etwas mehr gültige Blockhashes. Dadurch werden neue Blöcke im Durchschnitt leichter gefunden und die Blockzeit bewegt sich langfristig zurück in Richtung des Zielwerts von zehn Minuten.