Wie raten Miner genau

@flaco Und schon fertig mit lesen? =D

Danke für die Nachfrage!
Ich höre beim Autofahren das Buch von Yan Pritzker und lese dann gezielt im Buch BitcoinBegreifen.
Langsam aber sicher geht es vorwärts.

1 „Gefällt mir“

Wenn ich es richtig verstehe, müssen die Nodes jeden von irgendeinem Miner erzeugten Hash überprüfen und für gültig oder ungültig erklären. Dazu habe ich ein paar Fragen.

  1. Da die Software diesen Hash festlegt, stellt sich mir die Fragen, wie sichergestellt kann, dass die Miner dieses Hash nicht bereits kennen?

  2. In welcher Form erfolgt der Proof of Work durch die Miner, die schließlich beweisen müssen, dass sie Energie verbraucht haben?

  3. Wie viel Nodes müssen den Hash für gültig erklären?

Ich bin selber noch am herausfinden wie das Ganze läuft, aber ich denke es ist so:
Die Miner stellen einen Block mit gültigen Transaktionen zusammen () inkl. Der jeweiligen gehashten Transaktionen). Dann wird dieser Block gehasht. Wenn der resultierende Hash dem aktuellen Schwierigkeitsgrad, z.B. mit zwei Nullen beginnt, ist ein gültiger Block gemacht (gemint, gefunden). Falls der erzeugte Hash die beiden Nullen am Anfang des Hashes nicht hat, so wird etwas am Block geändert und erneut gehasht, solange bis es passt.
Der Beweis, dass Energie verbraucht wurde ist der gültige Hash, also ein gültiger Block.
Der Erste der einen gültigen Hash (Block) herstellt (findet) bekommt die Belohnung und die Transaktionsgebühren des Blocks.

@flaco Dem ist quasi nichts hinzuzufügen :slight_smile:

Blockquote
Wenn der resultierende Hash dem aktuellen Schwierigkeitsgrad, z.B. mit zwei Nullen beginnt, ist ein gültiger Block gemacht (gemint, gefunden).
Blockquote

Ich kann mir nicht vorstellen, dass nur der aktuelle Schwierigkeitsgrad geprüft wird. Sonst könnte der Miner sich doch einfach einen String zusammenbasteln. Wie wird gewährleistet, dass der Minder den aktuellen Schwierigkeitsgrad nicht kennt und so den Hash nicht manipulieren kann?

Wenn der Block gefunden wurde wird er an die anderen Nodes verteilt. Diese prüfen nicht nur den Blockhash, sondern auch den Blockinhalt, also insbesondere auch jede einzelne Transaktion. Sollte z.B. eine ungültige Transaktion enthalten sein, wird der Block vom Netzwerk ignoriert.

So zumindest mein Verständnis; @renna ist hier tiefer im Thema drin.

Sorry, wir reden aneinander vorbei. Im Allgemeinen wird es als das „Finden einer Zufallszahl“ beschrieben. Das mag jetzt nicht ganz korrekt sein, aber vielleicht kann ich damit mein Verständnisproblem besser darstellen. Die Minder müssen also eine bestimmte Zahl finden. Diese Zahl wird von der Software ermittelt und die Nodes überprüfen die von den Minern errechneten Zahlen. Wie wird sichergestellt, dass die Miner diese Zahl nicht kennen?

Jetzt wird mir dein Missverständnis klar :slight_smile:.

Die Miner suchen nicht einfach irgendeine Zufallszahl. Stattdessen erzeugen sie einen neuen Block, der sowohl neue Transaktionen enthält, als auch einen Teil den man variieren kann. Der Block wird gehasht. Dieser Blockhash ist nun die Zahl, auf die es ankommt.

Wenn der Hash kleiner als die Difficulty ist hat man einen neuen validen Block gefunden. Falls nicht gibt es mehrere Möglichkeiten, was man am Block verändern kann, damit sich auch der Hash ändert (siehe Beitrag #2). Diese verschiedenen Parameter werden solange geändert, bis der Hash passt. Nach Broadcasting des neuen Blocks im Netzwerk prüfen die anderen Teilnehmer dann, ob der Blockinhalt valide ist und ob der Blockhash richtig berechnet wurde.

Google doch mal nach SHA256 und schau dir an was der macht, ich glaube das wird dich einen Schritt weiter bringen.

1 „Gefällt mir“

Da hast du natürlich recht; das ist für das Verständnis entscheidend. :+1:

Der SHA256 Algorithmus erzeugt aus dem Block eine eindeutige 256 Bit Zahl, d.h. diese liegt in dezimaler Schreibweise irgendwo im Bereich von ca. 0…1,15e+77. Diese Zahl ist der Blockhash.

Entscheidend ist nun, dass man das Ergebnis des SHA256 Algorithmus nicht voraussagen oder zurückrechnen kann. Das heißt insbesondere man kann den Block nicht gezielt so verändern, dass der Hash kleiner oder größer wird. In diesem Licht betrachtet kann man das Ergebnis des Hashens als Zufallszahl ansehen.

Im Block werden nun solange die variablen Parameter geändert (Nonce hochzählen, Umordnen, Zeitstempel ändern), bis man zufällig einen Hash erhält, der kleiner als die Difficulty ist. Ein Miner ist also solange am Hashen bis er eine „Zufallszahl“ findet, die ein Treffer ist.

1 „Gefällt mir“

Ja genau, so verstehe ich das auch. Wirklich kompakt auf den Punkt gebracht.
Ich hatte den Eindruck, dass @sandromo das noch nicht ganz verstanden hatte.

Genauso habe ich es auch verstanden. Der Miner schickt seinen ermittelten Hash per Broadcast ins Netzwerk und die Nodes prüfen diese „Zahl“. Meine Frage zielte eher dahin, dass der Miner die Difficulty nicht kennt bzw. aus der Software „auslesen“ kann und somit den Hash in irgendeiner Weise manipulieren kann.

Ich habe noch eine weitere Frage. Wie viele Nodes im Netzwerk müssen diese Prüfungen/Bestätigungen durchführen (Gültigkeit des Hashwertes, Gültigkeit des Blocks, Gültigkeit einer Transaktion), damit das Ergebnis tatsächlich für gültig erklärt werden kann?

Toll, wir Tasten uns Schritt für Schritt an die Lösung. Der Miner kennt die Difficulty die sporadisch angepasst wird, damit ca. alle 10 Minuten ein gültiger Block gemint wird.
Also, wenn der neue Blockinhalt im Inhalt stimmt, und dieser dann gehasht wird, wird logischer weise der generierte Hash den gleichen Hash generieren wie der Hash der den letzten Block generiert hat.

Ich vermute, dass mindestens 51% der Nodes den neuen Block akzeptieren müssen, damit dieser gültig ist.

@renna kann uns sicher weiter helfen

Das ist doch der ganze Sinn von Hashes, dass man diesen eben nicht manipulieren/zurückrechnen kann.
Würde das gehen, wäre das Hashing-Verfahren „kaputt“ und man müsste ein anderes wählen.
Ein Hash muss leicht zu überprüfen aber unmöglich zurückzurechnen sein.

Da gibt es keine feste Zahl. Jede Node prüft das individuell für sich. Wenn der Block valide ist, hängt die Node den Block an ihre gespeicherte Blockchain an und propagiert diese ins Netzwerk.
Wenn eine Node den Block als ungültig erklärt würde sie das nicht tun.

Würde ein Teil der Nodes den Block als gültig ansehen und ein anderer Teil nicht, würde das einen Fork nach sich ziehen und es gäbe fortan quasi zwei Unterschiedliche Chains.

Der Hash ist Teil des Blocks. Wird ein Block gefunden, dann wird der ganze Block ins Netzwerk gegeben. Auch die erreichte difficulty ist Teil des Blocks und lässt sich aus dem Hash (Anzahl führender Nullen) ablesen. Ob der Block dann von den anderen Nodes akzeptiert wird, obliegt den anderen Nodes. Blöcke würden z.B. abgewiesen, wenn sie invalide Transaktionen enthalten, der Mining reward zu hoch ist, die difficulty zu niedrig, etc.
Deshalb sind eigene Nodes auch so wichtig, weil du damit mit entscheidest, welche Blocks gültig sind.

1 „Gefällt mir“

Eine Sache vestehe ich bei dem ganzen nicht.
Wenn die führenden Nullen beim Hash die Difficulty bestimmen, warum hat dann jeder Hash den ich mir bis jetzt angesehen habe und bei dem ich die Nullen gezählt habe, immer 19 führende Nullen?

Z.b.: Blöcke

683423 - letzter vor Anpassung 21.53%
Und
683424

Beide 19 führende Nullen beim Block-Hash

Der Block-Hash ist doch der dafür relevante, oder?

Und was mich noch Wundert, und fast glauben lässt, das es noch mehr variablen für die Schwierigkeit geben könnte,
Wie bekommt man so feine Abstufungen bis auf zwei Nachkommastellen eines %es nur mit den Nullen hin?
Oder ist es immer nur eine Annäherung an das soll?

Vielleicht hilft dir dieser Thread inkl. dem dort verlinkten kostenlosen Buch weiter:

Mining Difficulty

Wie du schon richtig gesagt hast, ist die Angabe der führenden Nullen nur eine Näherung.

1 „Gefällt mir“

Danke,

Werde mich da mal nach einer Antwort durchlesen :relaxed:

Hoffentlich mit mehr Erfolg als meine Google suchen :sweat_smile:

Sonst träume ich noch von den 19 Nullen :woozy_face:

Okay, bin mir jetzt nicht ganz sicher, aber ich vermute das Target besteht nicht nur aus den führenden Nullen, sondern auch noch aus den folgenden 3 Zeichen, dadurch verändern sich unter Umständen nur diese, je nachdem in welchem Bereich die Anpassung stattfindet.

Sehr ich das richtig?