DEV Community

Cover image for Blockchain und Bitcoin erklärt in 6 Episoden — Episode 2
Christian Ahrweiler
Christian Ahrweiler

Posted on Originally published at Medium

Blockchain und Bitcoin erklärt in 6 Episoden — Episode 2

Episode 2: Wie wird eine Blockchain gespeichert?Episode 2: Wie wird eine Blockchain gespeichert?In Episode 1 haben wir eine Blockchain aus miteinander verbundenen Blöcken aufgebaut.Jeder Block enthält Daten, den Hash seines Vorgängers und eine Nonce. Dadurch entsteht eine lückenlos überprüfbare Kette.

Doch wo befindet sich diese Kette eigentlich? Wer speichert ihre Daten? Wie lässt sich auf den Inhalt eines bestimmten Blocks zugreifen? Und muss jeder beteiligte Computer sämtliche Blöcke für immer aufbewahren?

Eine Blockchain besteht aus gewöhnlichen Daten

Unsere vereinfachte Blockchain bestand aus drei Blöcken:

Block 1
Daten Hallo Anna!
Vorheriger Hash –
Nonce 183
Hash 00ab71Block 2
Daten Hallo Anne!
Vorheriger Hash 00ab71
Nonce 4.927
Hash 003f92Block 3
Daten Hallo Anna und Anne!
Vorheriger Hash 003f92
Nonce 716
Hash 00c841Alle diese Angaben sind normale digitale Daten.

Sie können wie andere Daten in Dateien oder Datenbanken auf Festplatten und SSDs gespeichert werden.

Eine Blockchain benötigt also kein besonderes Speichermedium. Das Besondere ist nicht, wo ihre Daten liegen, sondern wie die Blöcke geprüft und zwischen mehreren Computern abgeglichen werden.

Nicht ein Speicherort, sondern viele Kopien

Würde die Blockchain nur auf einem zentralen Server gespeichert, hätte dessen Betreiber die vollständige Kontrolle über die Daten.

Deshalb wird eine öffentliche Blockchain nicht nur an einem Ort gespeichert.

Viele unabhängige Computer führen eigene Kopien der Kette. Ein Computer, der die Blockchain-Software ausführt und am Netzwerk teilnimmt, wird Node genannt.

Node A Block 1 Block 2 Block 3
Node B Block 1 Block 2 Block 3
Node C Block 1 Block 2 Block 3Es gibt damit keinen einzelnen Computer, auf dem sich „die Blockchain“ befindet.

Die Blockchain existiert als eine gemeinsam geprüfte Kette, von der viele Nodes eigene Kopien besitzen.

Woher erhält ein Node die Blöcke?

Ein Node ist über das Netzwerk mit anderen Nodes verbunden.

Wenn ein weiterer Block verfügbar ist, wird er zwischen den Teilnehmern weitergegeben. Jeder Node kann ihn speichern und selbst überprüfen.

Ein Node übernimmt die empfangenen Daten nicht einfach als richtig.

Er prüft, ob sich aus den Daten, dem vorherigen Hash und der Nonce der angegebene Hash ergibt. Außerdem kontrolliert er, ob der Block auf den richtigen Vorgänger verweist, sein Hash die festgelegte Bedingung erfüllt und alle weiteren Regeln der Blockchain eingehalten werden.

Erst wenn alle Blöcke und ihre Verbindungen erfolgreich geprüft wurden, erkennt der Node die Blockchain als gültig an.

Die Nodes müssen sich deshalb nicht gegenseitig vertrauen. Sie können die Gültigkeit ihrer eigenen Kopie selbst feststellen.

Was geschieht bei unterschiedlichen Kopien?

Es kann vorkommen, dass verschiedene Nodes vorübergehend unterschiedliche Fortsetzungen derselben Blockchain erhalten.

Version A Block 1 → Block 2 → Block 3A
Version B Block 1 → Block 2 → Block 3BBeide Versionen können korrekte Hash-Verbindungen besitzen und alle festgelegten Bedingungen erfüllen.

Die Nodes benötigen deshalb eine gemeinsame Regel, mit der sie zwischen diesen Versionen entscheiden.

Bei unserer Proof-of-Work-Blockchain wird die gültige Kette mit der größten insgesamt nachgewiesenen Rechenarbeit verwendet.

Wird Version A durch einen weiteren gültigen Block ergänzt, enthält sie mehr Proof of Work als Version B.

Version A Block 1 → Block 2 → Block 3A → Block 4A
Version B Block 1 → Block 2 → Block 3BDie Nodes können Version A übernehmen und gemeinsam fortsetzen.

Nicht die Anzahl der behaupteten Kopien entscheidet, sondern der überprüfbare Proof of Work, der insgesamt in der Kette enthalten ist.

Ein neuer Node kommt hinzu

Ein neu eingerichteter Node besitzt zunächst keine Kopie der Blockchain.

Er verbindet sich mit anderen Nodes und lädt die vorhandenen Blöcke herunter.

Dabei verlässt er sich nicht darauf, dass die erhaltenen Daten richtig sind. Er beginnt beim ersten Block und prüft die Kette selbst.

Zuerst prüft er Block 1. Danach kontrolliert er, ob Block 2 korrekt auf Block 1 verweist und alle Bedingungen erfüllt. Anschließend folgen Block 3 und alle weiteren Blöcke in der richtigen Reihenfolge.

Dieser Vorgang wird Synchronisierung genannt.

Bei einer langen Blockchain kann die erste Synchronisierung viel Zeit, Speicherplatz und Netzwerkverkehr benötigen.

Am Ende besitzt der neue Node eine selbst geprüfte Kopie der Blockchain.

Muss bei einem weiteren Block die gesamte Kette erneut geprüft werden?

Nein.

Bei der erstmaligen Synchronisierung prüft der Node die Blockchain vom ersten bis zum aktuell letzten Block.

Dabei speichert er das Ergebnis seiner Prüfung und die Informationen, die für die weitere Verarbeitung notwendig sind.

Trifft anschließend ein weiterer Block ein, beginnt der Node nicht erneut bei Block 1.

Er prüft, ob der Block korrekt auf den zuletzt bestätigten Block verweist, die Proof-Bedingung erfüllt und allen weiteren Regeln der Blockchain entspricht.

Ist der Block gültig, wird er an die bereits geprüfte Kette angehängt.

Die vollständige Geschichte muss deshalb nicht bei jedem weiteren Block erneut verarbeitet werden.

Wie greift man auf einen gespeicherten Block zu?

Die vollständigen Blöcke werden von einem Node in Dateien oder einer Datenbank gespeichert.

Zusätzlich führt der Node einen Index. Dadurch kann ein bestimmter Block direkt gefunden werden, ohne jedes Mal alle Blockdateien von Anfang an zu durchsuchen.

Ein Block kann beispielsweise über seine Position in der Kette oder über seinen Hash gesucht werden.

Eine Anfrage nach Block 2 liefert in unserer Beispiel-Blockchain:

Block 2
Daten Hallo Anne!
Vorheriger Hash 00ab71
Nonce 4.927
Hash 003f92Bei einer öffentlichen Blockchain können solche Abfragen auch über einen Blockchain-Explorer durchgeführt werden.

Ein Blockchain-Explorer ist eine Webseite, die im Hintergrund auf die gespeicherten Daten eigener Nodes zugreift und sie übersichtlich darstellt.

Aus einem Hash kann der ursprüngliche Inhalt nicht zurückgerechnet werden.

Der Hash kann verwendet werden, um einen vorhandenen Block zu finden oder dessen Daten zu überprüfen. Die eigentlichen Daten müssen aber weiterhin auf einem Node gespeichert sein.

Die Blockchain wird immer größer

Mit jedem weiteren Block wächst die gespeicherte Kette.

Nach vielen Jahren kann die vollständige Historie aus sehr vielen Blöcken und einer entsprechend großen Datenmenge bestehen.

Das bedeutet nicht, dass die Blockchain irgendwann automatisch aufhört zu funktionieren.

Es steigen jedoch die Anforderungen an den benötigten Speicherplatz, den Netzwerkverkehr, die erstmalige Synchronisierung und die vollständige Prüfung durch einen neuen Node.

Damit stellt sich die Frage, ob wirklich jeder Node alle alten Blockdaten dauerhaft behalten muss.

Alte Blockdaten bereinigen

Ein Node hat während der erstmaligen Synchronisierung jeden alten Block heruntergeladen und geprüft.

Danach kennt er die gültige Kette und hat die Informationen gespeichert, die er für die Prüfung weiterer Blöcke benötigt.

Die vollständigen Daten sehr alter Blöcke werden für den laufenden Betrieb nicht immer benötigt.

Der Node kann diese alten Blockdaten deshalb aus seiner lokalen Kopie entfernen.

Dieses Verfahren wird Pruning genannt.

Pruning bedeutet nicht, dass ungeprüfte Daten übersprungen werden.

Der Node lädt die Blöcke zunächst herunter, prüft sie und verarbeitet ihre Informationen. Erst danach entfernt er die vollständigen Daten alter Blöcke.

Was bleibt nach dem Pruning erhalten?

Ein bereinigter Node behält das Ergebnis der bisherigen Prüfung, die technischen Informationen über die Verbindung der Blöcke, den aktuellen gültigen Stand der Blockchain und eine bestimmte Anzahl neuerer vollständiger Blöcke.

Die vollständigen Inhalte älterer Blöcke können aus seiner lokalen Kopie entfernt werden.

Vor dem Pruning
Block 1 vollständig
Block 2 vollständig
Block 3 vollständig
Block 4 vollständig
Aktueller geprüfter StandNach dem Pruning
Notwendige Ketteninformationen
Block 3 vollständig
Block 4 vollständig
Aktueller geprüfter StandDer Node kann weiterhin weitere Blöcke vollständig überprüfen.

Er hat die alte Kette selbst geprüft und erst anschließend einen Teil der gespeicherten Daten entfernt.

Kann ein bereinigter Node noch auf Block 2 zugreifen?

Wenn die vollständigen Daten von Block 2 lokal gelöscht wurden, kann dieser Node dessen Inhalt nicht mehr direkt anzeigen.

Der Node kennt weiterhin die notwendigen technischen Informationen über die Kette. Aus dem Hash kann er den gelöschten Inhalt aber nicht wiederherstellen.

Benötigt man die vollständigen Daten von Block 2, müssen sie von einem anderen Node oder einer anderen Datenquelle abgerufen werden, die die gesamte Historie weiterhin gespeichert hat.

Genau deshalb bewahren manche Nodes sämtliche Blöcke dauerhaft auf.

Wird die Blockchain durch Pruning gelöscht?

Nein.

Pruning entfernt alte Blockdaten nur aus der lokalen Kopie eines einzelnen Nodes.

Andere Nodes können weiterhin die vollständige Historie speichern.

Ein Node, der alle Blöcke und deren vollständige Inhalte dauerhaft aufbewahrt, wird häufig Archiv-Node genannt.

Daneben gibt es bereinigte Nodes, die den geprüften aktuellen Stand, die notwendigen Ketteninformationen und neuere Blöcke speichern.

Leichte Clients speichern noch weniger Daten und greifen für bestimmte Informationen auf andere Nodes zurück.

Nicht jeder Teilnehmer muss die gesamte Historie aufbewahren.

Es müssen jedoch weiterhin genügend vollständige Kopien existieren, damit neue Nodes die Blockchain herunterladen und vom ersten Block an unabhängig prüfen können.

Warum funktioniert die Blockchain trotz Pruning weiter?

Der bereinigte Node vertraut nicht blind einem fremden Ergebnis.

Er hat die Blockchain zunächst selbst vollständig geprüft.

Danach speichert er das Ergebnis dieser Prüfung und die Informationen, die er zur Überprüfung weiterer Blöcke benötigt.

Wenn ein weiterer Block eintrifft, muss der Node deshalb nicht erneut alle alten Blockinhalte lesen. Er prüft den Block gegen die bereits anerkannte Kette und deren aktuellen Stand.

Pruning verkleinert lediglich die lokale Kopie. Es verändert weder die Blockchain im Netzwerk noch die Kopien anderer Nodes.

Zusammenfassung

Eine Blockchain liegt nicht auf einem einzelnen besonderen Server.

Ihre Blöcke werden als gewöhnliche digitale Daten auf vielen unabhängigen Nodes gespeichert.

Jeder Node kann seine Kopie selbst prüfen. Ein neuer Node beginnt beim ersten Block und überprüft alle folgenden Blöcke in ihrer richtigen Reihenfolge.

Nach dieser einmaligen vollständigen Prüfung müssen bei einem weiteren Block nicht erneut alle alten Blöcke verarbeitet werden.

Über einen Index kann ein Node direkt auf gespeicherte Blöcke und deren Inhalte zugreifen.

Entfernt er alte Blockdaten durch Pruning, kann er deren Inhalte lokal nicht mehr anzeigen. Er kann die Blockchain aber weiterhin fortlaufend prüfen, weil die notwendigen Ketteninformationen und der aktuelle geprüfte Stand erhalten bleiben.

Andere Nodes bewahren die vollständige Historie auf und stellen sie neuen Teilnehmern zur Verfügung.

In Episode 3 sehen wir uns Bitcoin als konkrete Anwendung dieser Technik an.Dann erklären wir, welche Daten Bitcoin in seinen Blöcken speichert, wie Transaktionen geprüft werden und wie beim Mining für einen Block eine passende Nonce gesucht wird.

Top comments (0)