Was lösen Bitcoin-Miner wirklich?

Wie beim Mining, was lösen die Bitcoin-Miner wirklich? Ich habe gelesen, dass sie Hashes lösen, aber was bedeutet das wirklich? Können wir sehen, was sie lösen? Kann jemand ein Beispiel dafür geben, was eine Bitcoin-Mining-Maschine zu lösen sieht?

Ok, aber WELCHE Daten gewinnen wir! Niemand scheint es zu wissen. Es ist mir egal, wie es funktioniert, ich möchte wissen, woher die Daten kommen, aus denen Bit-Mining entschlüsselt oder verschlüsselt wird.
Hier ist eine visuelle, gamifizierte Version des Problems, das Bitcoin-Miner zu lösen versuchen. Es ist buchstäblich ein Bincoin-Miner, und wenn Sie das Problem lösen, gewinnen Sie einen Bitcoin. hashhunt.josh.com

Antworten (5)

Sie versuchen, eine zufällige Nonce (wenig zufällige Daten) zu finden, die in einen Block einfließt und dafür sorgt, dass der Block einen (SHA256)-Hash hat, der (binär) mit einer bestimmten Anzahl von Nullen beginnt. Je mehr Nullen, desto seltener ist Hash. Ein gutes Hash-Ergebnis ist nicht vorhersehbar, und daher müssen Sie viele Male versuchen, ein gutes Nonce zu finden.

Die Anzahl der Nullen richtet sich danach, wie schwierig es sein soll, einen Block zu finden. In Bitcoin passt es sich an, alle 10 Minuten einen neuen Block zu haben (im Durchschnitt, angesichts der Rate, mit der vorherige Blöcke gefunden werden).

Interessant: Da die Hashes unvorhersehbar sind, spielt es keine Rolle, wie sich die Nonce ändert! Meistens ist es nur eine Zahl, die von 0 aufwärts zählt!

Hier ist eine extrem vereinfachte Skizze des Problems, aber es sollte eine ziemlich gute Vorstellung davon geben, was das Problem ist.

Die Daten:

Dies ist der Hash des letzten Blocks (gekürzt auf 30 Zeichen):

00000000000001adf44c7d69767585

Dies sind die Hashes einiger gültiger Transaktionen, die auf die Aufnahme warten (gekürzt).

5572eca4dd4
db7d0c0b845

Und dies ist der Hash einer speziellen Transaktion, die Sie gerade erstellt haben und der Ihnen 25 BTC (die aktuelle Belohnung) gibt:

916d849af76

Aufbau des nächsten Blocks:

Lassen Sie uns nun eine grobe Annäherung verwenden, wie ein neuer Block aussehen könnte (der echte verwendet das Binärformat). Es enthält den Hash des vorherigen Blocks und die Hashes dieser 3 Transaktionen:

00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--

Jetzt lass uns Mining von Hand machen! Unser Ziel ist es, diesen Block mit einem Nonce (einem Stück Müll) zu vervollständigen, sodass der Hash des neuen Blocks mit 13 Nullen beginnt (in Anbetracht des vorherigen Hashs scheinen 13 Nullen die aktuelle Schwierigkeit zu sein!).

Bergbau (versucht, diesen Block abzuschließen):

Versuchen wir es mit nonce=1 und berechnen den Hash des Blocks (ich verwende den md5-Hash-Algorithmus, aber Bitcoin verwendet Double sha256):

> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--1" | md5sum 
8b9b994dcf57f8f90194d82e234b72ac

Kein Glück, der Hash beginnt nicht mit einer 0… Versuchen wir es mit nonce=2

> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--2" | md5sum 
5b7ce5bcc07a2822f227fcae7792fd90

Kein Glück…

Wenn wir bis nonce=16 weitermachen, erhalten wir unsere erste führende Null.

> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--16" | md5sum 
03b80c7a34b060b33dd8fbbece79cee3

Für nonce=208 erhalten wir zwei führende Nullen!

> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--208" | md5sum 
0055e55df5758517c9bed0981b52ce4a

Fahren Sie so fort… Wenn Sie endlich einen Hash finden, der 13 führende Nullen hat… haben Sie gewonnen! Andere Miner bauen jetzt auf Ihrem Block auf, Sie haben gerade 25 BTC.

Aber du musst schnell sein!

Zurück zu Schritt 1…

Wenn es jemandem gelingt, einen Block vor Ihnen zu bauen, müssen Sie mit dem Hash des neuen Blocks (dem des Gewinners) wieder von vorne beginnen.

Beachten Sie, dass Sie nicht wirklich "Nullen zählen". In Wirklichkeit werden ungefähr die ersten vier Nicht-Null-Zahlen mit etwas verglichen, das als "Ziel" bezeichnet wird. Diese wird in kompakter Form in jedem Block in einem "Bits" genannten Feld gespeichert.
Auch Ihr Beispiel geht konzeptionell in die richtige Richtung, aber der wahre Erfolg ist, wenn der sha256-Hash des Headers kleiner als das Ziel ist. Beispielziel: 00000000000001ae00000000000000ist größer als 00000000000001adf44c7d69767585<-- dies wäre ein gültiger Hash.
"Und das ist der Hash einer speziellen Transaktion, die Sie gerade erstellt haben und die Ihnen 25 BTC (die aktuelle Belohnung) gibt: 916d849af76" Wie wird diese Transaktion erstellt?
@Reonarudo: Am einfachsten ist es, eine Ihrer Adressen zu verwenden, um eine einzelne Standardausgabe zu erstellen, die ausgegeben werden kann, aber Sie können auch jede Art von benutzerdefinierter Transaktion mit benutzerdefinierten Skripten fälschen, wenn es Ihnen gefällt (Sie dürfen ein Gesamtguthaben von +25 BTC haben für diese Transaktion waren zusätzliche Eingaben vor einiger Zeit nicht erlaubt, aber vielleicht sind sie es jetzt).
Normalerweise würde ich also einfach meine Wallet-Adresse am Ende zwischen - und -- anhängen?
@Reonarudo, nicht genau, dies ist eine sehr vereinfachte Skizze dessen, was tatsächlich getan wird. Transaktionen werden mit Skripten durchgeführt, die oft aus Adressen erstellt werden. Weitere Informationen finden Sie im Bitcoin-Wiki.
Das klingt im Grunde nach einer netten (vereinfachten) Zusammenfassung, aber ab wann akzeptiert das Bitcoin-Netzwerk dies als nächsten gültigen Block, und was passiert in dem (unwahrscheinlichen) Fall, dass es zwei verschiedenen Minern gelungen ist, fast gleichzeitig einen gültigen Block zu übermitteln?
Wow, tolle Antwort! Es gibt ein paar Dinge, die ich immer noch nicht verstanden habe: Nehmen wir an, Sie suchen seit 6 Minuten nach einer Lösung und es kommt eine neue Transaktion. 1) was passiert jetzt? wenn ich neu anfangen muss, dann klingt das so, als müssten alle neu anfangen. Wie kann Blockchain dann garantieren, einen Block in ~10 Minuten zu finden? 2) Wie kommt diese Transaktion überhaupt zu mir? 3) Was ist, wenn ich eine Lösung für diesen Block finde und dann eine neue Transaktion von einem anderen Knoten zu mir kommt, der sie für den Block akzeptiert hat, den ich gerade geschlossen habe?
1) Ja, jeder fängt von vorne an, wenn Sie auf einem alten Block aufbauen, besteht kaum eine Chance, dass Ihre Blöcke Teil der längeren Kette sind und vom Rest des Netzwerks ignoriert werden. Es gibt keine Garantie, dass ein Block innerhalb von 10 Minuten gefunden wird, es ist nur ein durchschnittliches statistisches Ergebnis. 2) Welche Transaktion? Blöcke werden von demjenigen gesendet, der sie abgebaut hat, und von anderen Knoten weitergeleitet. 3) Nichts zwingt Sie dazu, alle ausstehenden Transaktionen einzubeziehen, aber je mehr Transaktionen Sie einbeziehen, desto mehr Gebühren können Sie sammeln.
2) Die zum aktuellen Block hinzuzufügende Transaktion, die mich und alle (?) Anderen dazu veranlasst hat, die Berechnung neu zu starten. Wie kommt es zu mir? Und auch 3) Warum sollte ich es für 0,001 BTC akzeptieren, wenn ich einen neuen Block finden und 25 BTC bekommen soll? Danke Stéphane!

Das Folgende ist eine Beschreibung des globalen, statistischen Glücksspiels, das etwa alle 10 Minuten gespielt wird. Das Intervall des Spiels wird durch die Schwierigkeit gesteuert, die angibt , wie viele "Hashes" pro Intervall benötigt werden.

Mit anderen Worten, die difficultyund targetdefinieren die "Chancen des Hauses" gegen Ihre Chance, einen gewinnenden SHA-Hash zu erhalten. Das nonceist der "Rubbel"-Bereich.

Jeder Hash verbraucht Strom und gibt Wärme ab, die zusätzliche Kühlung erfordert.

Das wird mit jedem Hash gemacht:

Schritt 1

Auf hoher Ebene nimmt die Miner-Software eine Liste aktiver Transaktionen und gruppiert sie dann in einem sogenannten „Block“.

Oder genauer gesagt: Die Miner-Software wandelt alle Transaktionen in eine zusammenfassende Ansicht namens „Merkle Root“ um und hasht sie, was für die Transaktionen repräsentativ ist.

Schritt 2

Dann wandelt die Mining-Software dies in ein binäres Format namens Block Header um , das auch auf die vorherigen Blöcke verweist (auch Kette genannt).

Field           Purpose                          Updated when...               Size (Bytes)
Version         Block version number             You upgrade the software and   4
                                                 it specifies a new version 

hashPrevBlock   256-bit hash of the previous     A new block comes in          32
                block header    
hashMerkleRoot  256-bit hash based on all        A transaction is accepted     32
                the transactions in the block       

Time            Current timestamp as seconds     Every few seconds              4
                since 1970-01-01T00:00 UTC  

Bits            Current target in compact format   The difficulty is adjusted   4

Nonce           32-bit number (starts at 0)       A hash is tried (increments)  4

Schritt 3:

Die Miner-Hardware ändert einen kleinen Teil dieses Blocks, der als „Nonce“ bezeichnet wird.

Schritt 4:

Der Block-Header wird gehasht und mit dem Ziel verglichen, als wäre es einfach eine große Zahl wie 10.000.000 > 7.000.000 (die realen Zahlen sind viel größer und in Hex). Das Ziel wird komprimiert und in jedem Block in einem Feld namens Bits gespeichert.

Ein erweitertes Ziel sieht folgendermaßen aus:

  Target   0000000000000083ef00000000000000000000000000000000000000000000000

Und das Ziel ist sicherzustellen, dass der SHA256-Hash des Blocks kleiner als dieser Wert ist. Im Beispiel unten 83eeist " " kleiner als " 83ef"

Um dieses Konzept zu vereinfachen, können Sie das Ziel einschätzen, indem Sie die führenden Nullen zählen (wie die andere Antwort hier erklärt). Hier ist ein Beispiel:

Hier ist ein Beispielblock mit Transaktionen, die Sie auf BlockChain.info einsehen können. Suchen Sie in der oberen rechten Ecke der Webseite nach diesem Hash:

   Hash 0000000000000083ee9371ddff055eed7f02348e4eda36c741a2fc62c85bc5cf

Dieser vorherige Hash stammt von heute und hat 14 führende Nullen. Vergleichen wir das mit dem, was vor 3 Jahren mit Block 100 benötigt wurde, der 8 führende Nullen hat.

   Hash 00000000a8ed5e960dccdf309f2ee2132badcc9247755c32a4b7081422d51899

Zusammenfassung

Am Ende des Tages ist alles, was ein Miner tut, Folgendes:

  1. Nehmen Sie einen Blockheader als Eingabe
  2. Ändern Sie die Nonce
  3. Testen Sie, ob der Block-Header- Hash kleiner als das Ziel ist. Wenn ja, gewinnen Sie.
  4. Gehe zu Schritt 2 (oder gehe zu Schritt 1, wenn jemand anderes den Block gewonnen hat)

Möchten Sie sehen, was Bitcoin-QT tut, wenn es einen Block findet? ... Ich habe es hier gepostet. . Die Informationen in diesem Beitrag helfen Ihnen zu verstehen, was passiert ist.

Ist die Nonce (32 Bit) nicht viel zu klein, um einen Hash zu finden, der mit 14 führenden Nullen beginnen muss (14x4 = 56 Bit) ? Das Finden eines solchen Hashs würde im Durchschnitt 2^56 / 2 Versuche erfordern und mit einem 32-Bit-Nonce sind nur 2^32 Versuche möglich, bevor alle möglichen Nonce-Werte erschöpft sind. Bearbeiten: Da sich die Zeit jede Sekunde ändert, gilt dies wohl nur, wenn die Hash-Rate 4 GH / Sek. überschreitet (was meiner Meinung nach der Fall ist ...)
Ja, du hast recht, ... von der URL im Block-Header:Whenever Nonce overflows (which it does frequently), the extraNonce portion of the generation transaction is incremented, which changes the Merkle root.
Die beste Antwort, die ich bisher finden konnte. Ich verstehe immer noch nicht, wie ein Ziel festgelegt wird, und ich verstehe auch nicht ganz, wie wichtig es ist, einen Hash zu generieren, der kleiner als das Ziel ist. Also wird ein Hash generiert, der dem Ziel am nächsten, aber geringer ist, warum ist das wichtig? Liegt es daran, dass es theoretisch der komplexeste Hash ist, also der am schwierigsten (oder fast am schwierigsten zu knackende) Hash?
@VanceMcCorkle Unter den Bitcoin-Mining-Geräten ist es ein Rennen, wer das Gaspedal am weitesten drücken kann, ohne den Motor zu sprengen. Jede Kolbenbewegung erzeugt sozusagen einen Hashcode. Die Bedeutung ist nur ein >>RACE TO BURN OIL<<. Bitcoin sollte von Big Oil and Coal gesponsert werden.
@ChristopherJonMankowski Nur dass mein Wohnort hier im Bundesstaat Washington buchstäblich mit Regenwasser betrieben wird (Grand Coulee Dam). Außerdem vermiete ich grünen Hosting-Platz für Miner. Trotzdem habe ich noch keine klare Erklärung für den für mich sinnvollen Blockvalidierungsprozess gefunden. Obwohl ich den Bitcoin-Standard noch nicht gelesen habe.
@VanceMcCorkle versuchen Sie, die Kosten pro Gigahash oder Terrahash pro FOREX-Energiekosten zu berechnen. Das sind die industriellen Kosten des Kapitalismus, aber nicht das TCO-Äquivalent anderer Schulden und Kompromisse der Ökologie, die nicht berücksichtigt werden, da sie von Regierungsführung und Politik versteckt werden, um irgendwohin zu gelangen.

Mining bietet eine Möglichkeit, einen Konsens darüber zu erzielen, wie das Transaktionsbuch aussehen sollte, und zu wissen, dass niemand betrügt.

Das ist die nicht-technische Definition von Mining.

Die „Autorität“ für Double Spending ist die Blockchain. Die Blockchain besteht aus der Historie aller Blöcke in der Blockchain plus dem nächsten Transaktionsblock. Der Belohnungszuschuss beträgt derzeit 25 BTC für die Partei, die den nächsten Block einreicht. Aber hey … du hättest gerne diese 25 BTC (im Wert von derzeit etwa 825 $), genauso wie ich und alle anderen. Wie schaffst du es also, dass ich nicht schummeln und den Block selbst beanspruchen kann?

Nun, Sie haben ein System eingeführt, in dem Sie und ich miteinander konkurrieren müssen. Das ist es, was der Arbeitsnachweis tut – er macht es so, dass es einfach ist, zu beweisen, dass ich die damit verbundene Arbeit wirklich geleistet habe, wenn ich die Belohnung beanspruche. Damit ich also eine Chance von 2 % habe, einen Block zu lösen, muss ich 2 % der Mining-Arbeit investieren. Es gibt keine Möglichkeit für mich, weniger als 2 % der gesamten Arbeit zu investieren und trotzdem Blöcke in mindestens 2 % der Zeit (im Durchschnitt) zu lösen.

Wenn also ein Transaktionsblock eingereicht wird, überprüfen alle Peers, dass es keine doppelten Ausgaben gab, dass der richtige Betrag der Subvention beansprucht wurde und dass der Einreicher wirklich die für diese Lösung erforderliche Arbeit aufgewendet hat. Mit diesen drei Regeln muss es keine zentrale Behörde geben, die den Prozess verwaltet oder das Ergebnis kontrollieren kann.

Bergleute erraten eine zufällige Zielzahl, die eine vom Bitcoin-Protokoll generierte Gleichung löst. Natürlich machen Computer diese Vermutung, nicht Menschen.

Die Bitcoin-Blockchain verwendet den sicheren Hash-Algorithmus SHA-256, um 32-Byte-Zahlen derselben Länge auf eine Weise zu generieren, die eine vorhersehbare Menge an Prozessoraufwand erfordert. Um eine Kryptowährungs-Belohnung zu erhalten (und „legitime“ Transaktionen im Hauptbuch aufzuzeichnen), lösen Bergleute den Hash von Blöcken, die bestimmte Kriterien erfüllen (vom System festgelegt).

Eine "Schätzzahl" wird aus einem endgültigen Hash des aktuellen Block-Hash, Nonce , Daten und vorherigen Block-Hash gebildet. Eine Brute-Force-Suche wird wiederholt, bis Miner einen Hash entdecken, der kleiner als die Zielzahl ist.