Block

Die Blockchain ist eine Verkettung von Datenblöcken. Jeden Block kann man sich wie eine Seite in einem Hauptbuch vorstellen. Die einzelnen Blöcke setzen sich aus mehreren Komponenten zusammen. Grob lassen sich diese in den Kopf des Blocks (Block Header) und seinen Körper (Block Body) unterscheiden.

Was ist ein Block Header?

Der Kopf des Blocks teilt sich in sechs Bestandsteile auf.

1. Die Versionsnummer der Software 

Die Versionsnummer der Software spielt in den meisten Fällen keine große Rolle. Allerdings kann ein Miner mit einer bestimmten Versionsnummer signalisieren, welche Protokollentscheidungen er unterstützt. 

2. Der Hash des vorigen Blocks 

Der Hash des vorigen Block ist sozusagen die Kette der Blockchain. Weil der Hash des vorigen Blocks im Hash des neuen Block enthalten ist, bauen die Blöcke der Blockchain alle aufeinander auf. Ohne diese Komponente bestünde keine Verbindung und Chronologie zwischen den einzelnen Blöcken. 

3. Der Root Hash des Merkle Trees 

Alle Transaktionen, die in einem Block enthalten sind, können in einem Hash gesammelt dargestellt werden. Das ist der Root Hash des Merkle Trees.

4. Die Zeit in Sekunden seit 1970-01-01T00:00 UTC 

Ein Zeitstempel im Block selbst. Die Zeit wird in Sekunden seit dem 1.1.1970 angegeben.   

5. Das Ziel der aktuellen Schwierigkeit 

Das Ziel gibt an, wie klein der neue Hash sein muss, um Gültigkeit zu beanspruchen. Mit anderen Worten: jeder Hash hat eine Größe in Bits. Je niedriger das Ziel in Bits ist, desto schwieriger ist es, einen passenden Hash zu finden. Ein Hash mit vielen Nullen am Anfang ist kleiner als ein Hash ohne Nullen.

6. Die Nonce

Die Nonce ist die Variable, die beim Proof of Work hochgezählt wird. Auf diese Art und Weise errät der Miner einen gültigen Hash, also ein Hash, der kleiner als das Ziel ist.

Diese sechs Komponenten bilden den Block Header. Der Block Header spielt eine fundamentale Rolle in Bitcoin, denn er verbindet alle Blöcke miteinander. 

Was ist der Block Body ?

Wenn ein Miner einen Block konstruiert, überprüft er die Transaktionen auf ihre Gültigkeit. Das heißt, er überprüft ob der Versender auch tatsächlich über genug Geld verfügt, das er ausgeben kann. Diese Information kann er einfach aus der Blockchain lesen.

Die Transaktionen in einem Block stehen nicht einfach in einer Liste, sondern in einem sogenannten Merkle Tree.  

Was ist ein Merkle Tree? 

Der Merkle Tree hat seinen Namen von dem Mathematiker Ralph Merkle. Die Entdeckung war, dass viele Informationen in einem einzigen Hash dargestellt werden können. Dafür werden zuerst die Daten selbst gehasht. Anschließend werden die Hashes erneut gehasht und zusammengeführt. Schlussendlich ist der Merkle Tree in einem einzigen Hash zusammengeführt. Dieser letzte Hash trägt auch den Namen Root Hash, also die Wurzel des Baumes. Er repräsentiert alle Informationen seiner „Blätter“ (einzelne Transaktionen) und „Zweige“ (Hashes der Blätter) in einer relativ kurzen Zeichenfolge.  

Den Root Hash zu erzeugen ist einfach und schnell, sofern alle Zweige und Blätter bekannt sind. Wir erinnern uns an die Funktion einer Hash-Funktion: In die eine Richtung funktioniert sie eindeutig und schnell, in die andere Richtung lässt sie sich unmöglich aufschlüsseln. Wenn der Root Hash bekannt ist, die Transaktionen allerdings unbekannt sind, ist es unmöglich, die Transaktionen zu erraten. 

Ein Root Hash allein reicht also nicht aus, auch der restliche Block muss gespeichert werden. So kann der Miner den Root Hash jederzeit validieren, indem er die im Block enthaltenen Informationen erneut hasht. Solange die Hash-Funktion dieselbe ist, bekommen die Miner für einen bestimmten Input an Daten immer denselben Hash. Das ist sehr praktisch, denn sie können nur mit dem Hash überprüfen, ob sie auf dem gleichen Stand sind.  

Mining: Die Suche nach einem besonderen Hash 

In diesem Kontext fällt es leichter, das Mining des Proof of Work zu verstehen. Beim Mining wird der der Block Header des Blocks inkremental verändert, um einen besonderen Hash zu erhalten. Der Header besteht aus fünf Konstanten und einer Variable. Die Konstanten sind die Versionsnummer der Software, der Hash des vorigen Blocks, der Root Hash des Merkle Trees, der Zeitstempel und die Zielgröße des gesuchten Hashs in Byte. Die Variable ist die Nonce.

Die Nonce ist eine Zahl, die um eins erhöht wird. Dann hasht der Miner die Daten und überprüft, ob die Daten in einen Hash resultieren, der unter dem gesuchten Zielwert liegt. Wenn der Hashwert größer ist als das Ziel, wiederholt der Miner den Prozess; also erhöht die Nonce um eins, hasht und überprüft erneut. Dies wiederholt er solange, bis er einen Hash gefunden hat, der unter dem Ziel liegt oder er von einem anderen Miner aus dem Netzwerk einen Block erhält, dessen Hash unter dem Ziel liegt. Dann nimmt er sich diesen neuen Block und verwendet ihn als Grundlage für den nächsten Block (indem er den neuen Hash als „Hash des vorigen Blocks“ benutzt).  

Mining ist also ein hyper-repetitiver Prozess, dessen Ziel es ist, einen besonderen Hash zu finden. Ist der Hash gefunden, geht das Spiel von vorne los. Die Wahrscheinlichkeit, einen besonderen Hash zu finden, hängt von der Schwierigkeit ab. Im Schnitt wird bei Bitcoin alle 10 Minuten ein neuer Block gefunden. Die Schwierigkeit passt sich immer wieder an, sodass dieser Durchschnitt bestehen bleibt. 

Das Besondere an diesem Vorgang ist, dass der besondere Hash nur durch raten gefunden werden kann. Dieses Raten kostet Rechnenleistung und damit Energie. Ein Blick auf den besonderen Hash reicht, um zu erkennen, dass er besonders ist, denn er fängt mit Nullen an.  

Hier ein Beispiel für solch einen Hash aus der Bitcoin Blockchain:  

000000000000000000094bfa4edb1245c347e42452e4418e9fe5a1d24e335b16 

Hashes: Die Matrjoschka der Blockchain 

Ein Block kann man sich vereinfacht wie eine Matrjoschka vorstellen. Die kleinste Puppe ist die ungehashte Transaktion (Alice an Bob 10 Bitcoin). Die nächste Hülle ist die gehashte Form dieser Transaktion. Danach werden zwei gehashte Transaktionen zusammen gehasht. So werden die Hashes immer weiter zusammengeführt. Am Ende bleibt nur noch ein Hash, der Root Hash oder die größte Matrjoschka übrig.   

Häufige Fragen (FAQ)

Ähnliche Begriffe