Verständnis Frage zum Bitcoin Mining

Hallo

ich habe mal eine Frage zum Bitcoin Mining.

Grundlegend verstehe ich das Mining schon(korrigiert mich wenn ich falsch liege)
Ein Miner probiert verschiedene Zahlenkombination aus bis er die Lösung gefunden hat umso mehr TH der Miner hat umso mehr kombinationen schafft er in der Sekunde. Umso mehr Miner im Netzwerk sind Steigt die Difficulty indem die Zahlenreihenfolge länger wird. Hoffe ich liege bis jetzt soweit richtig.

Jetzt zu meiner Frage:
Woher weiß der Miner was die „Lösung“ ist?

Ich weiß das die Lösung wiederum alle Miner kontrollieren.

Aber wie entsteht die Lösung? Sind mehrere Lösungen Richtig?

Hoffe ihr verszeht soweit mein Verständis Problem :slight_smile: :weary: :weary:

Siehe auch:

1 „Gefällt mir“

Hallo,
Vielleicht hilft dir das weiter:
Blockchain 101

Danke für die Erklärung soweit habe ich das verstanden und ist auch klar auch das mit der Schwierigkeit…….

So wie ich das dann verstehe ist die Aufgabe bei jedem Block die selbe? Wie in deinem Beispiel Würfel eine Zahl die niedriger ist wie XY je nach difficulty schwieriger oder leichter……

Liege ich hier soweit richtig?

Wenn aber die Aufgabe ja immer die selbe ist müsste die Antwort ja auch immer die selbe sein und man könnte ja dann Tricksen oder?

In deinem Beispiel einfach zwei Würfel nehmen wo nur 1 drauf ist und man gewinnt jedesmal……

Das von mir verlinkte Video und auch Teil 2 dazu erklären das ganz gut.

Ja, die „Aufgabe“ an sich ist immer die gleiche. Das macht es aber nicht einfacher.

Der Würfel ist hier aber eine kryptographische Hashfunktion, SHA-256. :slight_smile:

Und die kannst du weder manipulieren oder vorhersagen.

Wenn du einen anderen Algorithmus nimmst ist dein Block bei anderen Teilnehmern ungültig. Schummeln bringt dir nichts.

Leider ist mein Englisch nicht so gut :sweat_smile:

Schade… :wink: Ist echt gut erklärt.
Vielleicht kann ja mal ein Video-Experte eine deutsche Version davon erstellen.

Oder Roman macht ein erklär Video :man_shrugging::grin:

Prinzipiell sind mehrere Lösungen Richtig, die dann aber in unterschiedlichen Blöcken resultieren. Die gleichen Eingangsparameter hingegen erzeugen immer den gleichen Block-Hash. Deshalb kann man da auch nicht tricksen. Der Block-Hash wird dann von allen Full Nodes (nicht nur anderen Minern) validiert.
Zu den Eingangsparametern gehören die Transaktionen, ein Zeitstempel, eine Nonce, die Coinbase Transaktion und der Hash des vorangegangenen Blocks. Beim Minen werden diese Parameter (bis auf den vorangegangenen Block) angepasst, in der Hoffnung, dass der daraus resultierende Hash der geforderten Difficulty genügt. Das definiert dann auch die Lösung – ein Hash, welcher der geforderten Difficulty genügt.

1 „Gefällt mir“

Ja um ehrlich zu sein raucht mein Kopf und ich verstehe das Grundprinzip schon

Für mich ich die „Frage“ und „Antwort“ Geschichte leider noch nicht schlüssig :joy::man_shrugging:

Das mit den Würfeln war schon eine coole Erklärung die hat mich schon weiter gebracht nur das gedanklich umzusetzen für die Hash und Blöcke usw fehlt mir noch :joy::man_facepalming:t3:

Sorry aber euch vielen vielen Dank für die Antworten……

Ich probiere mal eine Erklärung:

Als erstes ist es wichtig zu verstehen, was eine Hashfunktion macht. Die Hasfunktion nimmt eine beliebige Bitfolge aus Nullen und Einsen und verwandelt diese in eine andere Bitfolge.
Dabei gelten (unter anderem) folgende wichtige Regeln:

  • Es gibt kein Zufall. Die gleiche Bitfolge wird immer zum gleichen Ergebnis führen. zB. „aaa“->53637 „bbb“->19475 und „aaa“->53637 (Die bei Bitcoin verwendete Funktion ist etwas komplexer, aber als Beispiel reichen diese Zahlen) Die Ergebnisse sehen zwar zufällig aus, sind aber aus dem Startwert berechenbar.
  • Die Funktion ist nicht umkehrbar. aus dem Hashwert 53637 kannst du das „aaa“ nicht mehr eindeutig berechnen. Es ist also eine Einwegfunktion.

Nun kann ein Miner aus einem anderem Block einen gültigen Nachfolger bestimmen indem er einen Block erstellt, deren Hash kleiner als die Difficulty ist. In dem Hash fließen einige wichtige Statuswerter (der Header des Blockes) ein. Unter anderen Parametern sind das:

  • der Vorgänger des potenziell neuem Blockes. Wichtig damit man die Referenz in der Block-Kette kennt
  • der Merkletree, also die Referenz auf die gesammten Transaktionen des Blockes
  • eine zufällige Zahl, die der Miner frei variieren kann

Der Miner Baut also den Block zusammen, hasht den Header und schaut ob das Ergebnis kleiner als die Difficulty ist. zB:

  • „block31415,transaktionen7376,zufall1“->1458945
  • „block31415,transaktionen7376,zufall1“->1458945
  • „block31415,transaktionen7376,zufall2“->6920156
  • „block31415,transaktionen7376,zufall3“->9740320
  • „block31415,transaktionen7376,zufall4“->0038501 wir haben einen Block gefunden

Das wiederholt der Miner solange bis er einen Block gefunden hat. Da die Hashfunktion bei gleichem Input auch das gleiche Ergebnis ausspuckt muss er den Zuffalswert jedesmal ändern um einen anderen Hash zu generieren. Und das ist das Würfeln beim Minen. Jede Zahl kann das Ergebnis sein, die Chance ist halt nur recht klein. Hat er einen Block gefunden, veröffentlicht er ihn einfach. Jeder Nodebesitzer kann mit einer einfachen schnellen Hashfunktion das Ergebnis überprüfen. Der Miner musste aber x-fach neue Blöcke Generieren bis er endlich einen Block gefunden hat, deren Hash kleiner als ein bestimmter Wert ist.

Das Beispiel ist natürlich etwas vereinfacht da der Header noch mehr Informationen beinhaltet und anders Formatiert ist aber das Prinzip bleibt gleich bei Bitcoin. Auch die Hashfunktion spuckt eine deutlich größere Zahl aus als im Beispiel.

Generell ist das Minen mit Lotto zu vergleichen. Mit dem erstellen eines Blockes kaufst du dir mit Energie ein Los. Um zu schauen ob dein Los gewonnen hat hashst du den erstellten Block (rubbelst das los frei) und wenn du gewonnen hast holst du dir die Belohnung ab. In den meisten anderen Fällen verwirfst den Block einfach und erstellst einen neuen.

3 „Gefällt mir“

Vielleicht als kleine fortgeschrittene Ergänzung:
Der Zufallswert des Blockes ist lediglich 4 Bytes groß. Heutige Miner können diesen binnen einer Sekunde komplett durchsuchen und meist keinen Treffer finden. Trotsdem muss der Header variiert werden, andernfalls könnte man meinen dass es unmöglich ist einen Treffer zu finden.

Heutzutage wird der Header nicht mehr nur in dem Zufallswert verändert, sondern auch in der Blockzeit oder durch umsortieren der Transaktionen was den Merkle-Tree hash im header ändert.

Kleiner Fact am Rande… in 11 Tagen wird der 19‘000‘000 Bitcoin gemint werden…

Hey super vielen Dank für die Erklärung sehr gut vielen Dank…….

Allerdings hätte ich da noch eine kleine Frage​:sweat_smile::man_facepalming:t3:

Du schreibst (wenn ich es richtig verstanden habe) der gefundene Block muss kleiner der Difficulty sein klingt einleuchtend und entspricht ja auch dem Würfel Prinzip……

Wenn der miner jetzt einen gefunden hat kennst er ja den Hash die Zufallzahl und könnte doch beim nächsten mal einfach den selben Hash Zufallszahlen benutzen da die difficulty sich ja erst nach 2024 Blöcken oder so ändert und er könnte immer weiter den Hash nutzen……

Oder gilt als „Aufgabe“ das auch niemals der gleiche Hash verwendet werden darf?

Hoffe ich versteht was ich sagen will​:sweat_smile::man_facepalming:t3:

Der Hash ist nur die Ausgabe, das Ergebnis, der Hashfunktion.

Eingabe ist der Blockheader, und der ist logischerweise automatisch bei jedem Block ein anderer. Man kann den alten Input also nicht nachkonstruieren.

Man nennt eine Eigenschaft von (kryptographischen) Hashfunktionen auch den Lawineneffekt. Soll heissen dass bereits kleinste Änderungen am Input zu einem komplett anderen, nicht nachvollziehbaren Hashwert führen. Deswegen kann man sich nicht an alten Ergebnissen orientieren, sondern bei jeder Berechnung ist es ein Wahrscheinlichkeitsspiel wie beim Werfen eines Würfels.

Probier es hier mal aus:

1 „Gefällt mir“

Ah ok super jetzt komme ich der ganzen Sache schon sehr viel näher vielen Dank

:thinking:nur was genau ist der Blockheader?

Hier noch mal ein Video

Da stehen Informationen wie der Zeitstempel, die Schwierigkeit, ein Fingerabdruck aller Transaktionen, eine Nonce, eine Versionsnummer und der Hash des vorherigen Blocks. Damit identifizieren wir einen Block, wie Empfänger, Absender und Betreff einer E-Mail.

Hier stehen jetzt ein paar mehr Informationen die nur hier vom Block Explorer gezeigt werden:

Es wird eben nur dieser Header gehasht und nicht der komplette Block. Trotzdem hat (durch den Fingerabdruck der Transaktionen) jede kleinste Änderung direkten Einfluss auf den Header und damit auf den Hash.

So ok glaube jetzt habe ich es soweit verstanden vielen Dank euch allen :+1::+1::+1:

Und vielen Dank für das Video echt gut erklärt leider findet man solche Videos nicht so schnell bei YT wegen der geringen Views/Abos :man_shrugging::weary:

Ich bin jetzt ein bisschen (mehr) schlauer :grin::+1:

1 „Gefällt mir“