Wie raten Miner genau

Hallo zusammen

Ich möchte gerne verstehen was genau die BitcoinMiner rechnen oder raten.

Funktioniert das vielleicht so?:
In das Feld Nonce wird die Zahl 1 geschrieben und dann ein neuer Hash generiert. Beginnt der neu generierte Hash nicht mit der verlangten (Difficulty) Anzahl Nullen, so wird der Wert im Feld Nonce um eins erhöht und ein neuer Hash generiert. Das wird dann solange wiederholt, bis ein gültiger Hash, also mit der richtigen Anzahl Nullen herauskommt.
Bin ich da auf dem richtigen Weg? Oder weiss Jemand wo ich mehr darüber nachlesen könnte?
Besten Dank!
Grüsse
Markus

*Um euch ein Beispiel zu nennen: Der Text „The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.” ergibt den Hashwert: *

“635241ac823ee4a81fbb410c92be616b0a89191083d8d7b5d232c823dc8df4f5”

Der Hashwert eines Blocks muss in der Blockchain gewisse Vorgaben erfüllen. Beispielsweise muss der Hash bei Bitcoin mit einer bestimmten Anzahl von Nullen beginnen (Difficulty).

*Damit das möglich ist, enthält ein Block neben den vorgegebenen Daten das Feld „Nonce“, das eine beliebige Zahl enthalten darf. Beispielsweise ist die Difficulty „00“. Die Zahl im Feld Nonce (2983373116) und der Text im Datenfeld („The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.”) ergeben somit den Hash *

*00245750cdddf195efb0594740c08ed5b1a07c8df5cbc4b0d1d1e99bc69a0d3f. *

Je mehr Nullen für den Hashwert erforderlich sind, umso rechenintensiver ist das Finden einer Zahl, die einen solchen Hashwert liefert. Die Überprüfung, ob die Zahl mit den Daten auch wirklich einen solchen Hashwert ergibt, ist für euch sehr einfach. Das Finden einer solchen Zahl – also das sogenannte Mining - hingegen sehr aufwendig.

1 „Gefällt mir“

Hi flaco,

ja genau du bist auf dem richtigen Weg. Allerdings musst du noch bedenken, dass es weniger Noncen gibt, als mögliche Hashes, weswegen ggf. neben dem einfachen „Hochzählen“ auch die Transaktionen im Block umgeordnet/ausgetauscht werden müssen oder das Datenfeld für die Coinbasetransaktion anders beschrieben werden muss, damit sich der Hash des Blocks ändert :slight_smile: .

2 „Gefällt mir“

Das ist die deutsche Übersetzung zum sehr lesenswerten Buch „Grokking Bitcoin“. Sollte man gelesen haben =). Ab Punkt 7, geht es um das Mining.

Mein Screenshot vom Beitrag gerade eben, kommt auch von da :wink:

3 „Gefällt mir“

Ganz herzlichen Dank!
Das ist genau das was ich brauche. Das wird mich nun wohl für eine Weile beschäftigen.

3 „Gefällt mir“

Viel Spaß/Erfolg :smiley:.

Allgemein, falls du Buchtipps brauchst, schau gerne mal unter https://www.blocktrainer.de/buecher/

1 „Gefällt mir“

@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.