Blockchain/Niveau II · Mechanik/2.3 Blöcke und die Blockchain/Lektion 4
Proof-of-Work und das Ziel
Das Lotterielos, dessen Kauf Energie kostet und das sich mit einem Hash überprüfen lässt
MaterialienEine Block-Explorer-SchnittstelleEin Hexadezimalrechner oder eine Programmierumgebung, die SHA-256 berechnen kannDie Dokumentation der Bitcoin Developer Reference
Neugier
- Warum macht ein niedrigeres numerisches Ziel es schwieriger, einen gültigen Hash zu finden?
- Wie kann ein vier Bytes großer Wert eine Zahl kodieren, die groß genug ist, um 2^256 Möglichkeiten einzuschränken?
- Was passiert mit der erwarteten Blockzeit, wenn sich die Hashleistung verdoppelt, das Ziel aber unverändert bleibt?
Erkunden
- Ein Block wird nur akzeptiert, wenn er ein Rechenrätsel löst. Ein Miner muss einen 80 Byte großen Header finden, dessen doppelter SHA-256-Hash numerisch kleiner oder gleich einem bestimmten Schwellenwert ist, dem sogenannten Target (Ziel). Diese Bedingung verwandelt die Blockerstellung in die Suche nach einer seltenen Zahl in einem riesigen Raum von 2^256 möglichen Hashes. Die Gültigkeit jedes Kandidatenblocks hängt allein von dieser einen mathematischen Ungleichung ab.
- Das Ziel selbst wird nicht in seiner vollen 32-Byte-Form gespeichert, da dies zu viel Platz im Header beanspruchen würde. Stattdessen wird es mit einer Kodierung aus Mantisse und Exponent auf vier Bytes komprimiert, die „nBits“ heißen. Das Format ist verlustbehaftet und behält nur eine drei Byte lange Mantisse, sodass das Ziel leicht gerundet wird, was in der Praxis keine Nachteile hat. Durch Dekodierung dieser vier Bytes wird die riesige 256-Bit-Zahl wiederhergestellt, die die Obergrenze für zulässige Hash-Werte festlegt.
- Um einen gültigen Hash zu finden, probieren Miner Variationen der Header-Felder durch. Die wichtigste Variable ist die 32-Bit-Nonce, die pro Durchlauf rund 4,3 Milliarden verschiedene Werte bietet. Wenn die Hardware diese Kombinationen in kürzester Zeit ausgeschöpft hat, ändern Miner die Extra-Nonce in der Coinbase-Transaktion oder passen den Zeitstempel an, um neue Merkle-Roots und Header-Konfigurationen zu erzeugen. Jede Änderung führt zu einem völlig anderen Hash – im Grunde ein neues Lotterielos.
- Der erwartete Arbeitsaufwand steigt direkt proportional zur Schwierigkeit, während sich das Ziel in die entgegengesetzte Richtung bewegt: Passt das Netzwerk das Ziel an, nachdem die Hashleistung gewachsen ist, sinkt es, sodass eine gültige Lösung in binärer Darstellung mehr führende Nullen benötigt. Die erwartete Anzahl an Hashes, um einen Block zu finden, entspricht ungefähr der Schwierigkeit multipliziert mit 2^32. Diese Skalierung sorgt dafür, dass der durchschnittliche Abstand zwischen Blöcken stabil bei etwa zehn Minuten bleibt, unabhängig davon, ob auf Laptops oder in industriellen Mining-Farmen gemint wird.
- Verifizierung und Erstellung sind asymmetrisch. Während das Finden eines gültigen Hashes Milliarden von Versuchen erfordern kann, genügt zur Überprüfung ein einziger doppelter SHA-256-Hash des Headers und ein Vergleich mit dem Ziel. Die Proof-of-Work-Prüfung erfolgt daher sofort, auch wenn die vollständige Validierung eines Blocks weiterhin die Prüfung jeder darin enthaltenen Transaktion bedeutet. Das Sicherheitsmodell beruht auf diesem Ungleichgewicht: Arbeit zu erzeugen ist teuer, dieser Arbeit zu vertrauen ist billig.
- Der Genesis-Block wurde mit Schwierigkeit 1 gemint, der niedrigsten, die die Regeln zulassen; selbst dann benötigte ein gültiger Hash etwa 32 führende Null-Bits, also ungefähr einen Treffer auf 4,3 Milliarden Versuche. Jüngere Blöcke erfordern deutlich mehr führende Nullen, da die globale Hashleistung um viele Größenordnungen gewachsen ist. Der Vergleich der Hex-Darstellung des Hashes von Block 1 mit der eines aktuellen Blocks zeigt diesen dramatischen Wandel von einem offenen Feld zu einem stark eingeschränkten Suchraum.
Kernfakten
- Ein gültiger Bitcoin-Block-Header-Hash muss numerisch kleiner oder gleich seinem Schwierigkeitsziel sein.
- Das Ziel wird kompakt in vier Bytes als „nBits“ unter Verwendung der Mantisse-Exponenten-Kodierung gespeichert.
- Miner variieren die 32-Bit-Nonce, die Extra-Nonce der Coinbase und den Zeitstempel, um neue Hash-Kandidaten zu erzeugen.
- Die Schwierigkeit ist definiert als das maximal mögliche Ziel geteilt durch das aktuelle Ziel.
- Die Überprüfung des Proof of Work eines Blocks erfordert einen doppelten SHA-256-Hash des Headers und einen Vergleich.
- Der Genesis-Block wurde mit Schwierigkeit 1 gemint.
Übung neun, sechs, drei, eins
9SammelnNennen Sie 9 verschiedene Komponenten oder Variablen, die bei der Proof-of-Work-Berechnung für einen Bitcoin-Block-Header eine Rolle spielen.
6GruppierenGruppieren Sie diese 9 Elemente in 6 Kategorien, je nachdem, ob sie fest sind, pro Versuch variabel, pro Zyklus variabel, kompakt kodiert sind, aus Transaktionen abgeleitet werden oder zur Überprüfung verwendet werden.
3VerdichtenReduzieren Sie die 6 Gruppen auf 3 Kernprinzipien, die bestimmen, wie sich die Schwierigkeit mit der Rechenleistung des Netzwerks entwickelt.
1KristallisierenErklären Sie in einem Satz, warum Proof of Work schwer zu erzeugen, aber leicht zu überprüfen ist.
Faktcheck
Datumsangaben, Zahlen und Behauptungen wurden mit den unten aufgeführten veröffentlichten Quellen abgeglichen.