← Lernpfad Kapitel 3 von 7

Blöcke und die Timechain

Jeder Bitcoin-Block ist ein Paket aus Transaktionen, versiegelt durch Proof of Work und kryptographisch an seinen Vorgänger gekettet. Diese Kette — die Timechain — ist Bitcoins unveränderliches Kassenbuch. Einmal geschrieben, für immer gültig.

Was ist ein Block?

Ein Block besteht aus zwei Teilen:

  1. Block Header — 80 Bytes, die den gesamten Block identifizieren
  2. Transaktionsliste — alle Transaktionen, die der Miner in diesen Block gepackt hat (typisch: 2.000–4.000 Stück)

Der Header ist das Herzstück. Er enthält alles, was für Mining, Verkettung und Verifizierung nötig ist — in nur 80 Bytes.

Die 6 Felder des Block Headers

FeldBytesBeschreibung
Version4Protokoll-Version und Signalisierung von Soft Forks
Previous Block Hash32SHA-256d-Hash des vorherigen Block Headers — die Kette
Merkle Root32Hash aller Transaktionen dieses Blocks
Timestamp4Unix-Zeitstempel (Sekunden seit 1970-01-01)
Bits (Target)4Kompakt kodiertes Difficulty-Target
Nonce4Die Stellschraube des Miners — wird durchprobiert

Summe: 80 Bytes. Das ist alles. Ein Miner hasht diese 80 Bytes mit SHA-256d und prüft, ob das Ergebnis unter dem Target liegt. Wenn nicht, ändert er die Nonce und hasht erneut — milliardenfach pro Sekunde.

Erkunde den Block Header selbst

Lern-Werkzeug Dieses Tool arbeitet mit Beispieldaten und dient dem Verständnis von Block Headern.

// Block Header (80 Bytes Hex)

// Die 6 Felder eines Block Headers

BytesFeldBeschreibung
0–3VersionSignalisiert Softfork-Unterstützung
4–35Previous Block HashVerkettet die Blöcke zur Chain
36–67Merkle RootFingerabdruck aller Transaktionen
68–71TimestampUnix-Zeitstempel des Blocks
72–75Bits (Target)Komprimierte Darstellung der Schwierigkeit
76–79NonceDer Wert, den der Miner variiert

Diese 80 Bytes sind alles, was man braucht, um einen Block zu identifizieren und seine Gültigkeit zu prüfen. Sie sind der "Fingerabdruck" des Blocks.

Probiere es aus

Lade das Genesis-Block-Beispiel und untersuche die 6 Felder: Welchen Previous Block Hash hat Block 0? (Hinweis: Es gibt keinen Vorgänger — deshalb steht dort nur Nullen.) Beachte auch den Timestamp: 3. Januar 2009, der Startschuss.

Die Verkettung: Vom Block zur Timechain

Das Feld Previous Block Hash ist der Schlüssel zu allem. Jeder Block enthält den SHA-256d-Hash seines Vorgängers. Dadurch entsteht eine lineare Kette, die bis zum Genesis Block (Block 0, 3. Januar 2009) zurückreicht.

graph LR
    B0["Block 0\nGenesis\n03.01.2009"]:::genesis --> |"Hash₀"| B1["Block 1"]
    B1 --> |"Hash₁"| B2["Block 2"]
    B2 -.-> |"···"| BN["Block N\n~894.000"]:::current

    classDef genesis stroke:#98971a,stroke-width:2px,color:#98971a
    classDef current stroke:#fe8019,stroke-width:2px,color:#fe8019
Blöcke verkettet via Hash des vorherigen Blocks

Warum die Kette unveränderlich ist

Stell dir vor, jemand will eine Transaktion in Block 800.000 ändern. Was passiert?

  1. Die Transaktion ändert sich → der Merkle Root ändert sich
  2. Der Merkle Root ändert sich → der Block-Hash ändert sich (Lawinen-Effekt)
  3. Block 800.001 enthält aber den alten Hash als Previous Block Hash → ungültig
  4. Also muss auch Block 800.001 neu berechnet werden → neuer Proof of Work nötig
  5. Und Block 800.002, und 800.003, und jeder folgende Block…

Der Angreifer müsste also nicht nur den einen Block, sondern alle nachfolgenden Blöcke schneller neu berechnen als das gesamte ehrliche Netzwerk neue Blöcke findet. Bei der aktuellen Hashrate von über 700 EH/s ist das physikalisch unmöglich.

Je älter ein Block, desto sicherer ist er. Jeder neue Block, der oben drauf kommt, macht die Manipulation aller darunter liegenden Blöcke exponentiell teurer. Deshalb gelten Transaktionen nach 6 Bestätigungen (≈ 60 Minuten) als praktisch irreversibel.

Merkle Trees: Tausende Transaktionen in 32 Bytes

Ein Block kann tausende Transaktionen enthalten. Wie fasst man die in einem einzigen Hash zusammen? Mit einem Merkle Tree — einer binären Baumstruktur aus Hashes:

  1. Jede Transaktion wird gehasht → die Blätter des Baums
  2. Je zwei benachbarte Hashes werden zusammengehängt und erneut gehasht → eine Ebene höher
  3. Das wiederholt sich, bis nur noch ein einziger Hash übrig ist: der Merkle Root
                  Merkle Root
                 /           \
            H(AB)             H(CD)
           /     \           /     \
        H(A)    H(B)     H(C)    H(D)
         |       |         |       |
        TX A    TX B      TX C    TX D

// Transaktionen eingeben

Gib 2–8 Transaktions-Texte ein. Jede wird gehasht und in den Merkle Tree eingefügt.

// Was ist ein Merkle Tree?

  • Ein Merkle Tree fasst beliebig viele Daten in einem einzigen Hash zusammen (dem "Root")
  • Jede Änderung an einer Transaktion ändert den gesamten Pfad bis zum Root
  • Merkle Proofs ermöglichen es, eine einzelne Transaktion zu verifizieren, ohne alle anderen zu kennen (SPV — Simplified Payment Verification)
  • Im Bitcoin Block Header steht nur der Merkle Root — er repräsentiert alle Transaktionen des Blocks

Warum Merkle Trees genial sind

EigenschaftVorteil
Komprimierung10.000 Transaktionen → ein 32-Byte-Hash im Block Header
Effiziente VerifizierungEinzelne TX prüfen, ohne alle anderen zu kennen (Merkle Proof)
ManipulationsschutzEine TX ändern → der gesamte Pfad zum Root ändert sich
Logarithmisches WachstumProof-Größe: 10 TXs = 4 Hashes, 10.000 TXs = 14 Hashes

Merkle Proofs und SPV

Nicht jeder Bitcoin-Nutzer betreibt einen Full Node, der alle Transaktionen speichert. Leichtgewichtige Clients (SPV — Simplified Payment Verification) können mit einem Merkle Proof verifizieren, dass eine bestimmte Transaktion in einem Block enthalten ist, indem sie nur den Pfad vom Blatt zum Root kennen — nicht den gesamten Baum.

Merke

Merkle Trees ermöglichen Light Clients (SPV): Du kannst beweisen, dass eine Transaktion in einem Block enthalten ist, indem du nur wenige Hashes prüfst — nicht die gesamte Timechain. Bei 10.000 Transaktionen reichen 14 Hashes statt 10.000.

Der Genesis Block

Block 0 ist besonders: Er hat keinen Vorgänger. Satoshi Nakamoto hat ihn am 3. Januar 2009 erzeugt und in der Coinbase-Transaktion eine Nachricht hinterlassen:

"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"

Eine Schlagzeile der London Times — ein Zeitstempel und eine Absichtserklärung in einem.

Blockgröße und SegWit

Seit dem SegWit-Upgrade (2017) wird die Blockgröße nicht mehr in Bytes gemessen, sondern in Weight Units (WU). Das Maximum beträgt 4 Millionen WU pro Block (≈ 1–2 MB an Daten). SegWit-Transaktionen nutzen den Platz effizienter, weil die Witness-Daten (Signaturen) mit einem Rabatt von 75 % gewichtet werden.

Durch diese Begrenzung entsteht ein natürlicher Gebührenmarkt: Wenn mehr Transaktionen gesendet werden als in einen Block passen, konkurrieren sie über die Gebühren um den begrenzten Platz.


Weiterführend

Diskussion via Nostr

Kommentare werden über das dezentrale Nostr-Netzwerk geladen. Du brauchst eine Nostr-Identität und eine Browser-Extension wie nos2x oder Alby.