Diese Seite enthält den vierten Teil der Bitcoin-Grundlagen.
- Einführung in Bitcoin
- Die Grundbausteine
- Transaktionen
- Das Mining (diese Seite)
Beim Mining (Schürfen) werden gleich zwei Fliegen mit einer Klappe geschlagen: Zum einen wird das sogenannte „Double-Spending“-Problem gelöst. Es wird also verhindert, dass dieselben Bitcoins (vom rechtmäßigen Eigentümer) mehrfach ausgegeben werden. Und zum anderen wird dadurch aber auch gleichzeitig die „Herstellung“ von neuen Bitcoins geregelt. Der Mining-Prozess beginnt dabei mit …
Die Überprüfung (neuer) Transaktionen durch die Miner
Im vorherigen der Teil der Bitcoin-Grundlagen wird beschrieben wie Wallets überprüfen können, ob die Bitcoins einer Transaktion auch rechtmäßig (d.h. vom Eigentümer) verwendet wurden. Und genau diese Überprüfungen werden auch von einem Miner durchgeführt. Nachdem der Miner die neue Transaktion erfolgreich überprüft hat, speichert er diese in seinem (lokalen) Pool, der nur neue Transaktionen enthält. Und ab jetzt beginnt auch erst die eigentliche Arbeit eines Miners. Das Ziel von jedem Miner ist nämlich …
Das Lösen des aktuellen Puzzles
Bei Bitcoin gibt es zu jedem Zeitpunkt ein „kryptografisches Puzzles“ bei dem die Puzzleteile (hauptsächlich) aus Transaktionen bestehen. Wenn ein Miner ein Puzzle gelöst hat, gelten die Puzzleteile (Transaktionen), die ein Teil des gelösten Puzzles sind, als bestätigt. Und danach geht es sofort weiter mit der nächsten Runde. Da fortlaufend neue Transaktionen von Wallets erstellt werden, können die Miner auch ständig versuchen neue Puzzles zu lösen.
Wie aber funktioniert nun so ein Bitcoin-Puzzlespiel?
Die Puzzleteile bestehen aus …
1. Alte und neue Transaktionen
2. Eine zufällige/variable Zahl („nonce“)
Zudem gibt es …
3. Eine gültige Lösung des Puzzles (eine Zahl innerhalb eines festgelegten Bereichs) und
4. Eine Puzzle-Funktion, die aus beliebigen Eingabedaten eine Zahl generiert
Die „Puzzle-Funktion“ hat dabei zwei wichtige Eigenschaften:
- dieselben Eingabedaten liefern immer exakt dasselbe Ergebnis (Zahl)
- das Ergebnis (Ausgabe) liegt innerhalb eines bestimmten Zahlenbereichs
Die Puzzlefunktion akzeptiert also beliebige Eingabedaten. Wobei für dieselbe Eingabe immer dieselbe Ausgabe generiert wird. Außerdem ist es nicht möglich anhand der Eingabedaten abzuschätzen wo das Ergebnis ungefähr liegen könnte.
Schauen wir uns das Prinzip des Puzzlesipiels an einem (vereinfachten) Beispiel an.Unsere Puzzlefunktion ist in diesem Beispiel so programmiert, dass die Ergebniszahl (Ausgabe) immer zwischen 1 und 1000 liegt. Die folgenden drei Beispiele veranschaulichen bei welchen Eingabedaten die Funktion welche Zahl generiert. Mit „alte und neue Transaktionen“ sind in den Beispielen immer exakt dieselben Transaktionen gemeint.
Eingabe 1 | Alte und neue Transaktionen |
Eingabe 2 | 1 |
Ausgabe | 827 |
Eingabe 1 | Alte und neue Transaktionen |
Eingabe 2 | 2 |
Ausgabe | 390 |
Eingabe 1 | Alte und neue Transaktionen |
Eingabe 2 | 3 |
Ausgabe | 542 |
Wichtig dabei: Es nicht möglich anhand der Eingabedaten herauszufinden in welchen Bereich oder gar die genaue Zahl als Ergebnis der Funktion geliefert wird.
Gültige Lösungen / Schwierigkeit
Die Puzzlefunktion generiert immer eine Zahl zwischen 1 und 1000. Wenn wir also genau diesen Bereich auch gleichzeitig als Bereich aller gültige Lösungen festlegen würden, würde bei jeder Art von Eingabedaten immer eine gültige Lösung gefunden werden. Mit anderen Worten: einfacher/leichter geht es nicht mehr! Um also die Schwierigkeit des Puzzles zu erhöhen könnten wir z.B. den Bereich der gültigen Lösungen auf alle Zahlen unter 750 festlegen. Somit wären 25% aller Zahlen, die die Puzzlefunktion als Ergebnis liefern kann, außerhalb des Bereichs der gültigen Lösungen. Bei den obigen Beispielen würde dann das erste Beispiel keine gültige Lösung liefern. Um die Schwierigkeit noch weiter zu erhöhen, könnten wir nur alle Ergebnisse unter 500 als gültige Lösungen anerkennen. Damit wären die Hälfte der Ergebnisse, die die Puzzlefunktion liefert ungültig. Bei den obigen Beispielen würde dann das erste und letzte Beispiel keine gültige Lösung liefern. Es gilt also: je kleiner der Bereich der gültigen Lösungen umso höher die Schwierigkeit eine gültige Lösung zu finden.
Das Ziel eines Miners ist es immer eine Zahl („nonce“) zu finden, bei der die „Puzzlefunktion“ als Ergebnis eine Zahl innerhalb eines (von den Bitcoin-Regeln) festgelegten Bereichs liefert. Und wie genau findet man nun so eine Zahl? Ganz einfach: es wird einfach eine Zahl nach der anderen ausprobiert. Und zwar so lange bis ein gültiges Ergebnis gefunden wird. Ob die Zahlen dabei nacheinander (1, 2, 3..) oder zufällig (345, 12, 9811..) ausprobiert werden, hat auf die Wahrscheinlichkeit das richtige Ergebnis zu finden keine Auswirkung. Im Durchschnitt findet übrigens alle 10 Minuten ein Miner eine gültige Lösung. Bevor wir uns anschauen was passiert nachdem ein Miner eine Lösung gefunden hat, müssen wir erst folgende Frage beantworten:
Wie werden Transaktion zusammengefasst bzw. aufbewahrt?
Bisher haben wir die Transaktionen nur immer als einzelne „Datenstücke“ betrachtet. So werden auch neue Transaktionen innerhalb des Bitcoin-Netzwerks verbreitet. Sobald aber ein Miner versucht eine Lösung für das aktuelle Puzzle zu finden, werden diese einzelne Transaktionen in einem Datenbehälter zusammengefasst. So einen Datenbehälter ist dabei vergleichbar mit einer Schublade eines Karteischranks:
Die Karteikarten entsprechen dabei den Transaktionen. Eine einzelne Schublade (die Transaktionen enthält) wird bei Bitcoin als „Block“ bezeichnet. Übrigens: genau wie bei der physischen Schublade hat auch ein Block eine begrenzte Kapazität/Größe. D.h. ein Block kann (maximal) nur eine bestimmte Anzahl an Transaktionen enthalten. Der ganze Karteischrank wird bei Bitcoin als „Blockchain“ bezeichnet.
Kartei-System | Bitcoin |
Karteikarte | Transaktion |
Schublade | Block |
Schrank | Blockchain |
Ein Block (Schublade) enthält neben den eigentlichen Transaktionen auch Metadaten wie z.B. die Nonce (eine gültige Lösung des Puzzles). Eine gültige Lösung des Puzzles wird übrigens bei Bitcoin als Proof-of-Work (Arbeitsnachweis) bezeichnet.
Und mit diesem Wissen können wir nun die Antwort auf die (zuvor gestellte) Frage besser verstehen:
Was passiert nachdem ein Miner eine Lösung gefunden hat?
Sobald ein Miner eine gültige Lösung des aktuellen Puzzles gefunden hat, wird er einen neuen Block erstellen, der u.a. folgende Dinge enthält1:
- eine gültige Lösung des Puzzles
- neue Transaktionen (die er für die Lösung des Puzzles verwendet hat)
Neben den normalen Transaktionen wird er aber auch eine spezielle, von ihm selbst erstellte, sogenannte Coinbase-Transaktion in den Block einfügen. Diese Transaktion ist die Belohnung für das Finden einer Lösung und hat folgende Eigenschaften:
Eingang | (keiner) |
Ausgang | beliebige Bitcoin-Adresse |
Betrag | 12,5 BTC |
Nachdem der Miner nun den Block fertiggestellt hat, wird er diesen ins Bitcoin-Netzwerk senden. Dort wird dann jeder Teilnehmer (Wallets und Miner) kontrollieren, ob sich der Block an die aktuell gültigen Bitcoin-Regeln hält. Dabei wird z.B. überprüft ob in der Coinbase-Transaktion auch tatsächlich nur die erlaubten 12,5 BTC als Betrag angegeben wurden. Selbstverständlich wird auch überprüft ob die „nonce“ (Lösung des Puzzles für diesen Block) gültig ist.
Übrigens: Im Gegensatz zum Finden der „nonce“, ist für die Überprüfung auf deren Gültigkeit der dazu benötigte Rechenaufwand minimal.
Nachdem ein Teilnehmer einen neuen Block erfolgreich überprüft hat, wird er diesen an das Ende seiner (lokal gespeicherten) Blockchain anhängen und die Transaktion die darin enthalten sind als „bestätigt“betrachten. Und genau so kommt bei Bitcoin der Konses über legitime Transaktionen zustande!
Der ganze Mining-Prozess nochmal …
Zusammengefasst
Ein Miner erhält über andere Miner und Wallets ständig neue Transaktionen. Diese überprüft er anhand der entsprechenden Bitcoin-Regeln. Wenn die Transaktion gültig ist, speichert der Miner diese in seinem lokalen Transaktions-Pool (für neue Transaktionen). Aus diesem Pool holt sich der Miner Transaktionen um das Puzzle zu lösen. Wenn er eine Zahl (nonce) gefunden hat, die zusammen mit den von ihm ausgewählten neuen (unbestätigten) Transaktionen bei der Puzzlefunktion ein gültiges Ergebnis liefert, hat er das Puzzle gelöst. Daraufhin erstellt er ein neuen Block mit den entsprechenden Transaktionen und der Lösung des Puzzles (nonce) und sendet diese ins Bitcoin-Netzwerk. Der neue Block verbreitet sich dann innerhalb weniger Sekunden unter allen Teilnehmer, die zur Zeit mit dem Bitcoin-Netzwerk verbunden sind. Jeder Teilnehmer überprüft ob der neue Block sich an die Bitcoin-Regeln hält. Wenn ja, fügt er diesen ans Ende seiner lokalen Blockchain hinzu und sendet ihn auf Anfrage an andere Wallets und Miner.
Hinterlassen Sie einen Kommentar