Bitcoin Blockzeit

Sie wissen: Die zu erwartende Zeit zwischen zwei Bitcoin-Blöcken beträgt im Schnitt \(10\) Minuten. Nun tätigen Sie eine wichtige Bitcoin-Transaktion und warten gespannt, ob und wann sie im nächsten Block auftaucht:

e50bfacc95975a4e7545d83d8954645f


Da Sie nicht geprüft haben, wann der vorherige Block fertiggestellt wurde, erwarten Sie durchschnittlich eigentlich \( \frac{t}{2} = \frac{10}{2} = 5 \) Minuten an Wartezeit. Nachdem \(5\) lange Minuten verstrichen sind, prüfen Sie, wann der letzte Block tatsächlich fertiggestellt wurde:

e50bfacc95975a4e7545d83d8954645f

Schon vor \(7\) Minuten wurde der letzte Block fertiggestellt. Da sie nun diese Information wissen, ändert sich die zu erwartete Zeit von \(5\) Minuten auf insgesamt \(10\) Minuten. Das heißt: In ca. \(3\) Minuten ist es wahrscheinlich so weit. Sie setzen den Befehl wieder und wieder ab. Und warten. Nach weiteren \(10\) Minuten beschleicht Sie das Gefühl, das irgendetwas nicht stimmt.

Doch dann erinnern Sie sich an das Wartezeitparadoxon:

Wenn Busse im Durchschnitt alle \(t\) Minuten fahren, entspricht bei zufälliger Ankunftszeit an der Bushaltestelle die Wartezeit nicht \(\frac{t}{2}\) Minuten, sondern im Falle von exponentialverteilten Abständen \(t\).

Bitcoin-Blockvorkommen sind ein Poisson-Prozess und damit exponentialverteilt. Da Poisson-Prozesse gedächtnislos sind, wird auch der nächste Block im Durchschnitt in \(10\) Minuten fertiggestellt. Das gilt immer – egal wie lange wir schon warten. Die Eigenschaft der Erinnerungslosigkeit gilt ebenso rückwärts wie vorwärts in der Zeit.

Wie kann das sein?

Dazu betrachten wir die folgenden beiden Aussagen:

  • A) Die tatsächliche durchschnittliche Wartezeit zwischen zwei Blöcken liegt bei \(10\) Minuten, nicht bei \(20\) Minuten.
  • B) Wählt man einen zufälligen Zeitpunkt, erwarten wir, dass der vorherige Block \(10\) Minuten in der Vergangenheit abgebaut wurde und der nächste Block \(10\) Minuten in der Zukunft abgebaut wird. Wir können also eine Wartezeit von \(20\) Minuten zwischen den Blöcken erwarten.

Wir überprüfen beide Aussagen.

Dazu extrahieren wir uns zunächst die relevanten Daten, konkret die Zeitpunkte der Fertigstellungen der Blöcke in eine TXT-Datei (auszuführen mit einem lokal laufenden Full-Node auf Basis von bitcoind):

e50bfacc95975a4e7545d83d8954645f

Damit erhalten wir die folgende Textdatei, die wir nun weiter verarbeiten und in /time.txt ablegen. Dazu dient folgendes Rust-Programm mit der Datei /Cargo.toml:

e50bfacc95975a4e7545d83d8954645f

Die Datei /src/main.rs enthält die eigentliche Test-Logik:

e50bfacc95975a4e7545d83d8954645f

Wir installieren die Dependencies, builden das Programm und starten es:

e50bfacc95975a4e7545d83d8954645f

Und tatsächlich: Beide Aussagen sind wahr, wenn wir die Ausgabe analysieren:

e50bfacc95975a4e7545d83d8954645f

Intuitiv lässt sich das auch einfach wie folgt erklären: Bei starker Varianz der Blockzeiten variiert die konkrete Wartezeit – führen wir die Transaktion zu einem zufälligen Zeitpunkt aus, ist die Wahrscheinlichkeit höher, genau in einem Intervall zu landen, in dem die Wartezeit länger als 10 Minuten ist, da diese Intervalle wegen der längeren Zeit auch mehr Platz auf der Zeitachse einnehmen.

Zurück