Warum ist Mining teuer und Prüfen billig?
Proof of Work (Arbeitsnachweis) heißt: Wer einen Block anhängen will, muss zuerst viel rechnen. Wer das Ergebnis prüft, braucht dafür nur eine einzige Rechnung.
Dadurch ist das Anhängen von Blöcken teuer und das Nachprüfen billig. Das schützt alte Blöcke davor, heimlich ersetzt zu werden.
Am Ende dieser Lektion
Notiz
Ich kann erklären, warum Mining viele Versuche braucht und die Prüfung nur einen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Nonce | eine Zahl, die man so lange ändert, bis der Hashwert passt |
| Schwierigkeit | wie viele Nullen am Anfang des Hashwerts stehen müssen |
| Mining | Nonces ausprobieren, bis ein Block die Regel erfüllt |
| Proof of Work | der Nachweis, dass für einen Block gerechnet wurde |
| Versuch | eine Berechnung eines Hashwerts mit einer Nonce |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Nonce ist die Zahl, die man durchprobiert
Die Regel lautet: Der Hashwert eines Blocks muss mit einer bestimmten Zahl von Nullen beginnen. Diese Zahl heißt Schwierigkeit. Den Hashwert kann niemand lenken.
Darum ändert man eine Zahl im Block, die Nonce, und berechnet den Hashwert neu. Man beginnt bei 0, dann 1, dann 2, bis die Regel erfüllt ist.
Eine Nonce selbst suchen
import hashlib
daten = "Fahrt nach Passau"
schwierigkeit = 2 # Ändern Sie die Zahl auf 3 und starten Sie neu.
nonce = 0
while True:
text = daten + ":" + str(nonce)
hashwert = hashlib.sha256(text.encode()).hexdigest()
if hashwert.startswith("0" * schwierigkeit):
break
nonce = nonce + 1
print("Nonce:", nonce)
print("Hashwert beginnt mit:", hashwert[:12])
Was das Beispiel ausgibt
Bei Schwierigkeit 2 gibt das Beispiel Nonce: 724 aus. Der Hashwert beginnt dann mit 00. Bei Schwierigkeit 3 braucht es 4175 Versuche.
Es gibt keine Abkürzung. Ein Hashwert lässt sich nicht rückwärts rechnen. Man kann nur probieren.
Die Ausgabe des Labors ist englisch
Notiz
Das Skript mine.py gibt englische Wörter aus, nämlich difficulty, nonce, tries und hash. Achten Sie auf die Zahl hinter tries. Sie sagt, wie viele Hashwerte berechnet wurden.
Denselben Block bei vier Schwierigkeiten schürfen
docker exec jupyter python3 steps/mine.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Versuche im Labor und im Durchschnitt
| Schwierigkeit | Versuche im Labor | Durchschnitt (16 hoch Schwierigkeit) |
|---|---|---|
| 1 | 15 | 16 |
| 2 | 835 | 256 |
| 3 | 7992 | 4096 |
| 4 | 109028 | 65536 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Jede Null mehr kostet etwa das 16-Fache
Eine Hex-Ziffer hat 16 mögliche Werte. Dass eine bestimmte Stelle eine 0 ist, trifft im Schnitt jeden 16. Versuch. Zwei Nullen treffen im Schnitt jeden 256. Versuch.
Die Zahlen im Labor liegen über dem Schnitt, denn der Zufall streut. Das Skript gibt bei jedem Start dieselben Werte aus, weil Block und Start fest sind.
Den Durchschnitt bei Schwierigkeit 4 rechnen
docker exec jupyter python3 -c "print(16 ** 4)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Prüfen kostet nur eine Rechnung
Wer eine Nonce gefunden hat, schreibt sie in den Block. Alle anderen berechnen den Hashwert einmal. Beginnt er mit genug Nullen, ist der Nachweis erbracht.
Suchen kostet viele Versuche, prüfen kostet einen. Diese Ungleichheit ist der Kern von Proof of Work.
So schützt die Arbeit alte Blöcke
Wer einen alten Block ändert, muss ihn neu schürfen. Weil jeder spätere Block den Hashwert des geänderten enthält, muss auch jeder spätere Block neu geschürft werden.
Je älter der Block, desto mehr Arbeit kostet die Fälschung. Das haben Sie in der ersten Lektion gesehen: Nach dem Neuschürfen von Block 1 fiel Block 2 durch.
Ein häufiger Fehler
Warnung
Viele glauben, die Arbeit beweise, dass die Einträge wahr sind. Sie beweist nur, dass jemand gerechnet hat. Proof of Work macht das Ändern teuer, mehr nicht.