⏱️ Die Bitcoin Blockzeit

Der dezentrale Herzschlag des Netzwerks.

👶 Für Einsteiger (ELI15)

Bitcoin funktioniert wie ein globales Sudoku-Rätsel, an dem tausende Computer gleichzeitig arbeiten. Die Regel lautet: Im Durchschnitt soll alle 10 Minuten eine Lösung gefunden werden. (Zielwert nPowTargetSpacing in chainparams.cpp)

Aber was passiert, wenn immer mehr super-schnelle Computer mitmachen? Sie würden das Rätsel in 1 Minute lösen!

Die Lösung (Difficulty Adjustment): Das Netzwerk merkt sich: "Hoppla, wir waren zu schnell!". Alle 2'016 Blöcke (ca. alle 2 Wochen) passt sich die Schwierigkeit automatisch an (14 Tage ÷ 10 Minuten = 2'016; nPowTargetTimespan in chainparams.cpp, DifficultyAdjustmentInterval in params.h). Waren die Computer zu schnell, wird das Rätsel schwerer. Waren sie zu langsam, wird es leichter. So bleibt der Takt bei 10 Minuten – egal wie viel Rechenleistung existiert.

Wie die Anpassung funktioniert (Beispiel)

Ziel: 14 Tage
Für 2'016 Blöcke
vs.
Realität: 7 Tage
Miner waren zu schnell!
⬇
Konsequenz:
Schwierigkeit (Difficulty) verdoppelt sich (+100%)

👨‍🔬 Wissenschaftliche Analyse

Das Finden eines Blocks ist bei gleichbleibender Rechenleistung in guter Näherung ein Poisson-Prozess (Bowden et al., arXiv:1801.07447). Da Hash-Funktionen zufällige Ergebnisse liefern, kann ein Block mal nach 1 Minute, mal nach 50 Minuten gefunden werden. Nur der Durchschnitt (Mean) liegt bei rund 10 Minuten.

Das Difficulty Adjustment

Alle 2'016 Blöcke (eine "Epoche") berechnet jeder Node unabhängig das neue Schwierigkeitsziel nach folgender Formel:

New Difficulty = Old Difficulty × ( 2016 × 10 min / Zeit für letzte 2016 Blöcke )

Um extreme Schwankungen zu vermeiden, ist die Anpassung pro Epoche auf den Faktor 4x (maximal) und 0.25x (minimal) begrenzt (pow.cpp, CalculateNextWorkRequired).

Genau genommen misst der Code die Zeit zwischen dem ersten und dem letzten Block der Epoche, also 2'015 Blockabstände (pow.cpp, GetNextWorkRequired). Rechnerisch arbeitet der Code mit dem Zielwert (Target), der umgekehrt zur Difficulty läuft.

Fun Fact: Durch das bisher stetige Wachstum der Hashrate (eine Power-Law-Form ist hier eine Modellannahme) liegt die historische durchschnittliche Blockzeit tatsächlich leicht unter 10 Minuten (ca. 9:40 min), da die Difficulty immer erst "nachträglich" reagiert. Nachgerechnet: vom Genesis-Block (3. Januar 2009) bis Block 966'143 (9. September 2026) im Mittel 9 min 37 s (Zeitstempel aus chainparams.cpp: Genesis 1231006505, Block 966'143 1788925573).