Blockchain

Was ist Mining?

Was ist Mining?

Eine Blockchain ist eine dezentrale Datenbank. Das heißt, dass die Daten dieser Datenbank nicht an einem Ort gespeichert werden, sondern an vielen verschiedenen Orten. Die Herausforderung dabei ist, dass wir natürlich trotzdem nur einen Datensatz haben wollen, auf den wir uns verlassen können, und nicht viele verschiedene, bei denen wir nicht wissen, welcher nun der richtige ist.

Diesen Ansatz können wir am Beispiel einer Bank verdeutlichen: Eine Bank führt eine zentrale Datenbank, in welcher sie die Kontostände ihrer Kunden speichert. Wann immer ein Kunde etwas bezahlt, wird der gezahlte Betrag von seinem Kontostand auf der Datenbank abgezogen und anschließend auf der Datenbank einer anderen Bank dem Kontostand des Bezahlten hinzugefügt. Hierbei wird die technische Simplizität durch das große Vertrauen kompensiert, welches wir den Führern dieser Datenbanken entgegenbringen müssen.

Wenn wir diese Datenbanken nun zu einer Datenbank zusammenführen und sie dezentralisieren (wir speichern alle Daten also an vielen verschiedenen Orten), müssten wir nicht mehr einer Institution vertrauen, die die Macht über eine der Datenbanken hat, sondern auf den Konsens der vielen Speicherorte. Wenn >50 % dieser Speicherorte solch einen Konsens finden (sich also auf denselben Datensatz einigen), können wir diesem Vertrauen, solange die Speicherorte dazu incentiviert sind, ehrlich und fehlerfrei zu handeln.

Die Frage ist also, wie eine dezentrale Datenbank – eine Blockchain – solch einen Konsens zwischen den verteilten Speicherorten der Daten herstellen kann. Diese Speicherorte heißen auf einer Blockchain übrigens Nodes.

Zur Findung solch eines Konsens zwischen den Nodes gibt es verschiedene Mechanismen (engl. “consensus mechanisms”). Der bekannteste Konsensmechanismus ist Proof-of-Work (PoW), welcher das erste Mal erfolgreich mit der Bitcoin-Blockchain eingesetzt wurde. In diesem Konsensmechanismus findet sich auch das Thema dieses Block-Posts wieder: das Mining.

Hinweis: Der Begriff Nodes wird oft als Synonym für viele verschiedene Begriffe genutzt. Dieses Problem findet seinen Ursprung bereits in dem berühmten Bitcoin-Whitepaper, in dem Satoshi Nakamoto den Begriff der Nodes als Synonym für die Miner verwendet. In diesem Artikel simplifizieren wir diese Thematik ein wenig, indem wir (nur) zwischen Minern und Nodes unterscheiden. Hierbei Speichern die Nodes die gesamte Blockchain und verifizieren und validieren Transaktionen.

 

Was sind Miner?

Miner (auch Mining-Nodes genannt), sind so wie alle anderen Nodes auch an der Validierung und Verifizierung von Transaktionen und deren Verbreitung beteiligt.

Das heißt, sie überprüfen, ob eingehende Transaktionen Valide sind und verifizieren bereits abgeschlossene Transaktionen. Bei der Überprüfung eingehender Transaktionen wird zum Beispiel geschaut, ob der Sender einer Kryptowährung auch wirklich im ausreichenden Besitz dieser Währung ist und ob genug Transaktionsgebühren mitgesendet werden.

Sobald die eingegangenen Transaktionen ausgeführt wurden und somit in einem Block integriert sind, werden die Transaktionen erneut überprüft und der Block wird verifiziert. (Wenn du mehr darüber erfahren möchtest, was eigentlich ein Block ist und wann er verifiziert ist und wann nicht, kannst du dir unseren Artikel zu diesem Thema anschauen.)

Was Miner nun von anderen Nodes unterscheidet ist, dass sie Blöcke erstellen und dass über sie neue Coins einer Kryptowährung emittiert werden. Im Beispiel der Bitcoin-Blockchain werden durch die Miner also neu geschaffene Bitcoins in den Umlauf gebracht.

Um einen besseren Einblick in die Funktionsweise einer Mining-Node zu bekommen, schauen wir uns einmal im Schnelldurchlauf den Transaction Lifecycle (übersetzt: Lebenszyklus einer Transaktion) auf der Bitcoin-Blockchain an:

  1. Person A erstellt eine Transaktion, in der sie 1 BTC (Bitcoin) an Person B sendet (außerdem fügt sie ausreichende Transaktionsgebühren hinzu)
  2. Person A teilt diese Transaktion mit einem Teil des Bitcoin-Netzwerk (den Nodes inkl. den Minern)
  3. Jede Node validiert die Transaktion und sendet sie an weitere Nodes, bis jede Node in dem Netzwerk die Transaktion gesehen und validiert hat
  4. Jeder Miner erstellt einen eigenen Block, in den er alle noch nicht ausgeführten und validen Transaktionen (z. B. die von Person A) integriert und eine weitere Transaktion ergänzt, in der er sich die Transaktionsgebühren und die mit jedem Block neu geschaffenen Bitcoins “überweist”.
  5. Schafft der Miner es, den Block fertigzustellen, sendet er diesen an alle anderen Nodes, die diesen erneut verifizieren.
  6. Wird der Block von den Nodes verifiziert, gilt die Transaktion als durchgeführt und Person B empfängt den Bitcoin.

Für diesen Artikel sind für uns besonders die Punkte 4 und 5 relevant, denn sie beschreiben die Hauptaufgabe der Miner.

 

Was passiert beim Mining?

Vielleicht hast du schon mal gehört, dass Mining das Lösen von komplizierten Rechenaufgaben sei; was eher als eine Analogie zu verstehen ist und zu einigen Missverständnissen führen kann. Um zu verstehen, was beim Mining wirklich passiert, schauen wir uns einmal eine vereinfachte Form eines Blocks auf einer Blockchain an:

Bemerkung: Für ein besseres Verständnis empfehlen wir unsere Artikel über Blöcke und Hashes.

Auf dieser Abbildung sehen wir eine vereinfachte Form eines Blocks.

Zwei Dinge sind hier für uns von Besonderer Bedeutung: Die Nonce und der Hash.

Jeder Block hat einen Hash, der aus dem Block selbst generiert wird. Das Generieren eines Hashs ist keine besondere Herausforderung – moderne Computer können viele Tausend Hashes pro Sekunde generieren. Dabei ist wichtig zu verstehen, dass ein Hash immer dieselbe Größe an Bits und Länge an Zeichen hat und immer auf Basis eines beliebigen Datensatzes generiert wird (mit diesem Tool kannst du das Generieren von Hashes selbst ausprobieren). Ebenfalls wichtig zu verstehen ist, dass derselbe Datensatz immer denselben Hash erzeugt und der Datensatz geändert werden muss, um einen anderen Hash zu erzeugen.

In dem Fall des Miners ist dieser Datensatz der Block mit den Transaktionen, aus dem er einen Hash generiert (unten auf der Abbildung).

Erinnern wir uns nun nochmal an den 4. und 5. Punkt des Transaction Lifecycles:

“Jeder Miner erstellt einen eigenen Block, in den er alle noch nicht ausgeführten und validen Transaktionen (z. B. die von Person A) integriert […]”

“Schafft der Miner es den Block fertigzustellen, sendet er diesen an alle anderen Nodes, die diesen erneut verifizieren”

Jeder Miner des Blockchain-Netzwerks fügt also alle auszuführenden Transaktionen, die er empfangen hat, in einem Block (wie auf unserer Abbildung) zusammen. Da jeder Miner den Block selbst erstellt, kann es teilweise passieren, dass Miner versuchen, sich voneinander unterscheidende Blöcke fertigzustellen. Das eigentliche Minen passiert jetzt bei dem Fertigstellen des Blocks.

Der Miner erzeugt nun das erste Mal einen Hash aus dem soeben erstellten Block und erhält dabei (zum Beispiel) das folgende Ergebnis:

“8f434346648f6b96df89dda901c5176b10a6d83961dd3c1ac88b59b2dc327aa4”

Würde der Miner diesen Block nun an die Nodes senden und somit sagen, dass dieser Block fertig gemined sei, würden die Nodes den Block jedoch ablehnen und nicht verifizieren.

Das liegt daran, dass der Hash des Blocks der sogenannten Difficulty nicht gerecht wird.

Die Difficulty setzt bestimmte Anforderungen an den Hash eines Blocks, die erfüllt werden müssen, damit ein Block von dem Netzwerk (den Nodes) akzeptiert wird. Vereinfacht gesagt soll der Hash nämlich mit einer bestimmten Anzahl an Nullen beginnen (Hinter den Nullen verbirgt sich eigentlich eine andere Logik, die jedoch den Rahmen dieses Artikels sprengt. In unserem Artikel zur Difficulty und Block Time gehen wir darauf genauer ein.)

Ein valider Hash könnte zum Beispiel so aussehen:

“0000000000000000000487c69d9a6dcd9e19a94605da281b6b42516661e1dc3a”

Wie zuvor erwähnt, verändert sich ein Hash nur, wenn sich der Datensatz (also der Block) verändert, durch den der Hash erzeugt wurde. Deswegen verändert der Miner so lange die Nonce (siehe die Abbildung des Blocks) des Blocks, bis er einen Hash erzeugt, der der Difficulty gerecht wird. Hier gibt es keinen effektiveren Weg, als zufällige Zahlen für Nonce zu wählen.

Findet der Miner schließlich eine Nonce, mit der der Block einen validen Hash erzeugt, teilt der Miner diesen Block umgehend mit dem Netzwerk und bekommt (sofern der Block akzeptiert wird) die Transaktionsgebühren der Transaktionen in dem Block und (im Beispiel von Bitcoin), die mit jedem Block neu geschaffenen Bitcoins.

Sobald ein Miner einen validen Block an das Netzwerk schickt, überprüfen die anderen Miner, ob sich die Transaktionen, die in dem Block stehen, mit den Transaktionen überschneiden, die sie in ihrem Block integriert haben, den sie aktuell versuchen zu minen. Die sich überschneidenden Transaktionen, die folglich bereits abgeschlossenen wurden, löschen sie und erstellen anschließend einen neuen Block mit noch nicht abgeschlossenen Transaktionen, den sie dann versuchen als erster fertigzustellen.

Dies ist ein immer weiterführender Kreislauf: Jeder Miner erstellt einen Block und versucht ihn als erstes fertigzustellen, indem er es schafft, eine Nonce zu finden, mit welcher der Block den richtigen Hash ergibt. Schafft er dies vor allen andern Minern wird er belohnt. Wenn er es nicht als erster schafft, muss er mit einem neuen Block wieder von vorne beginnen.

Mit dem “Lösen von komplizierten Rechenaufgaben” ist also gemeint, die richtige Nonce zu finden. Dafür müssen oft Millionen bis Milliarden Zahlen nach dem Zufallsprinzip ausprobiert werden.

 

Was sind Mining-Pools?

Vielleicht ist dir schon aufgefallen, dass das Minen eines Blocks viel mit Glück zu tun hat, da es um die richtige Nonce zu finden, keinen besseren Weg gibt, als zufällige Zahlen auszuprobieren. Nun könnte man denken, dass somit jeder Miner dieselben Chancen auf die ihm zustehende Belohnung hat, wenn er seinen Block als erster fertigstellt. Jedoch kann ich meine Chancen auf Erfolg erhöhen, indem ich mehr Hashes in einer bestimmten Zeit berechne als die anderen Miner. Hierzu kann man sich die sogenannte Hash-Rate (H/s) anschauen. Die Hash-Rate gibt an, wie viele Hashs ein Miner (bzw. seine Computer Hardware) pro Sekunde errechnen kann.

Da es als Miner mit einer geringen Hash-Rate äußerst unwahrscheinlich ist, überhaupt einmal einen Block als erster “zu lösen”, kann man sich einem Mining-Pool anschließen. In einem Mining-Pool schließen sich viele Miner zusammen und teilen ihre Gewinne. Die Gewinne werden dabei proportional zur beigesteuerten Hash-Rate an die einzelnen Miner ausgezahlt. Da die großen Mining-Pools eine enorm hohe Hash-Rate haben, werden die Umsätze auch für die kleinen Miner (Miner mit geringer Hash-Rate) prognostizierbar und bieten damit Raum für ernsthafte Geschäftsmodelle. Es gibt sogar einige börsennotierte Mining-Unternehmen, die teils mehrere Milliarden Euro an der Börse wert sind.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert