7. Proof of Work, Arbeitsnachweis

Dieses Kapitel behandelt

  • Zensurfeste Transaktionen durch Zulassen vieler “Lisas”

  • Wettbewerb um die Produktion des nächsten Blocks, oder Mining

  • Miner Motivation verstehen

Das vergangene Kapitel hat es Lisa erschwert, Transaktionen zu löschen, indem wir eine Blockchain eingeführt haben, in der Lisa alle Blocks signieren muss. Dieses Kapitel geht einen Schritt weiter und macht das System zensurresistent, sodass Lisa keine Transaktionen zensieren kann.

Um das System zensurresistent zu machen, ersetzen wir die digitales Signaturen in den Block Headern durch Proof of Work, einen Leistungsnachweis (Abbildung 1), der viele Lisas, oder Miner, möglich macht. Diese Miner stehen im Wettbewerb um die Erzeugung des nächsten Blockes, indem sie versuchen, einen gültigen Proof of Work zu produzieren. Miner können diesen Proof of Work dadurch erzeugen, dass sie eine riesige Menge kryptografische Hashes berechnen. Wallets können ihre Transaktionen jetzt beliebig vielen Minern schicken, um sicherzugehen, dass ihre Transaktionen bearbeitet werden.

07 01
Abbildung 1. Proof of Work, Arbeitsnachweis

Mit dem neuen Proof of Work System wollen Miner die Blocks so klein wie möglich halten, um sie möglichst schnell in den Share hochladen zu können. Miner sind also motiviert, Transaktionen auszuschliessen, was genau das ist, was wir vermeiden wollten. Um die Miner zum Bearbeiten einer Transaktion zu motivieren, kann eine Transaktion eine Transaktionsgebühr oder Transaction Fee bezahlen, die an denjenigen Miner geht, der einen Block produziert, in dem die Transaktion bestätigt wird.

Das Proof of Work System ersetzt digitale Signaturen in den Block Headern. Aber digitale Signaturen waren eingeführt worden, um Lisa vom Löschen von Transaktionen abzuhalten. Keine Sorge– das Proof of Work System tut dies genau so gut, nur auf eine etwas andere Art. Anstatt es beweisbar zu machen, dass Lisa gemogelt hat, macht es das Mogeln schwierig und teuer.

In diesem Kapitel diskutieren wir die Motivationsstruktur der Miner. Warum sollten sie minen? Warum sollten sie Transaktionen nicht löschen, nachdem sie bestätigt wurden? Welchen Schaden kann ein Miner anrichten, wenn er den Grossteil oder die gesamte Hashleistung kontrolliert? Wir können eine Menge interessante Dynamiken bezüglich Miner Motivation diskutieren.

7.1. Lisa klonen

Wir haben Privacy ein wenig in [privacy-issues] und [decentralized] von [ch01] besprochen. Ich habe angemerkt, dass in einem System mit einer zentralen Autorität diese Autorität die absolute Macht darüber besitzt, wer das System benutzen kann und zu welchem Zweck.

Und was ist mit dem Share?

Richtig: Der Systemadministrator der Shares ist auch eine zentrale Autorität. Der Administrator kann sich weigern, gewisse Blocks hinzuzufügen, sodass niemand diese je sehen wird. Wir werden dies in [ch08] beheben, wenn wir das Peer-to-Peer Netzwerk einführen.

Lisa ist die zentrale Autorität, die jede Transaktion beliebig zensieren kann. Nimm an, Lisa hat gerade ein Buch von einer berühmten Dietätikerin gelesen, in dem stand, dass Kekse ungesund sind. Sie hat das Gefühl, etwas gegen die Keks-Orgie in der Firma unternehmen zu müssen. Sie fängt also an, die Bearbeitung von Zahlungen zu verweigern, von denen sie annimmt, dass sie zum Erwerb von Keksen dienen–zum Beispiel, indem sie nach Zahlungen mit einem Output in Höhe von 10 CT schaut (Abbildung 2).

07 02
Abbildung 2. Lisa könnte Transaktionen wie ein Diktator zensieren. Keine Kekse für John!

Leuten, die einen Keks im Café bezahlen wollen, wird der Service verweigert weil ihre Zahlungen nicht durchgehen. Lisa könnte auch andere Zahlungen herausfiltern, die gar nichts mit Keksen zu tun haben, weil sie glaubt, sie würden zum bezahlen von Keksen verwendet.

u07 01

Eine weitere Zensurmöglichkeit wäre, dass die Acme Versicherung Lisa zwingt oder besticht, verdächtige Kekskauf-Transaktionen zu verwerfen, weil sie nicht wollen, dass die Leute an Fettleibigkeit erkranken. Eine kranke Person bedeutet grosse Verluste für Acme.

Was wäre, wenn wir mehrere Leute wie Lisa hätten, sodass man sich nicht auf die Ehrlichkeit und stete Verfügbarkeit einer einzelnen Person verlassen müsste? Nimm an, du lässt Tom und Qi auch das machen, was Lisa tut. Wenn die Wallet alle Transaktionen an alle drei schicken würden, würde das das Zensurrisiko dramatisch verringern. Aber wie würden diese drei die Blocks kontrolliert erzeugen, sodass sie nicht ständig sich gegenseitig widersprechende Blocks auf der gleichen Höhe produzieren?

7.1.1. Block-Kollisionen

Miner

Ein Miner ist jemand, der Blocks erzeugt. Lisa ist ein Miner, und ebenso Tom und Qi.

Angenommen, die aktuelle Blockhöhe ist 100. Tom und Qi haben gerade ihre Blocksignier-public Keys auf dem schwarzen Brett und im Firmen-Intranet veröffentlicht. Alle Wallets fangen an, die Transaktionen an alle drei Blockproduzenten, oder Miner, zu schicken. Abbildung 3 illustriert, was passiert.

07 03
Abbildung 3. Tom und Qi fangen an, Blocks zu produzieren genau wie Lisa, was zu Block-Kollisionen führt. Die Block Header wurden der Klarheit halber vereinfacht.

Wenn alle das tun, was Lisa tat, produziert jeder einen Block alle 10 Minuten, was zu drei verschiedenen Blocks mit ungefähr denselben Transaktionen führt. Die grössten Unterschiede zwischen den Blocks finden sich in den Coinbase Transaktionen und den Signaturen. Die Coinbase von Toms Block würde die Blockbelohnung an Toms Cookie Token Adresse zahlen, wogegen die Coinbase von Lisas Block die Belohnung an Lisas Cookie Token Adresse zahlt.

7.1.2. Glückszahlen ziehen

u07 02

Um dieses Problem zu vermeiden, müssen die Miner irgendwie entscheiden, wer von ihnen den nächsten Block produziert. Sie könnten sich reihum abwechseln, aber das wäre kompliziert, weil vielleicht Lisas Computer einmal kaputtgeht, oder aus irgendeinem Grund sich Tom mal weigert, einen Block zu produzieren. In solch einem Szenario würde das System steckenbleiben.

Probieren wir einen anderen naiven Ansatz (Abbildung 4). Jede Sekunde zieht jeder Miner eine Zufallszahl zwischen 0 und 999.999. Wenn ein Miner zufällig eine Zahl im Bereich 0 bis 555 zieht, darf er sofort den Block signieren und veröffentlichen. Die Wahrscheinlichkeit, einen Treffer bei einem einzelnen Versuch zu landen, ist gering–556/1.000.000, oder grob 1 in 1.800 Versuchen. Die Miner ziehen sekündlich eine Zahl, also kann man für jeden Miner durchschnittlich einen Treffer in 30 Minuten (1.800 Sekunden) erwarten. Die drei Miner zusammen produzieren dann im Schnitt 1 Block alle 10 Minuten.

07 04
Abbildung 4. Drei Miner bauen Blocks. Normalerweise werden Blocks konfliktfrei erzeugt. einer nach dem anderen, aber manchmal gibt es Streit um den nächsten Block, wie auf Höhe 106.
Ehrliche Miner

Dieser Ansatz ist naiv, weil wir annehmen, dass Miner Zufallszahlen ziehen, ohne zu mogeln.

Wenn ein Miner einen Treffer zieht, ist die Chance gering, dass einer der anderen Miner gleichzeitig ebenfalls eine Glückszahl gezogen hat, Das bedeutet, normalerweise wird nur ein Miner den nächsten Block produzieren.

Die Miner speichern ihre Blocks als <_last-8-hexdigits-of-blockid_>.dat im Share, sodass mehrfache Block-IDs auf derselben Höhe sich nicht um Dateinamen sorgen müssen. Ein Beispiel für einen Dateinamen ist 9ce35c25.dat.

Dieses System klappt ganz gut, aber ab und zu ziehen zwei Miner gleichzeitig ein Glückslos. Sie wissen nichts davon, dass jemand anders auch einen Treffer gezogen hat, also produzieren beide einen Block auf derselben Höhe. Diese Situation kennt man als Blockchain Aufspaltung, oder Blockchain Split, weil sich die Blockchain in zwei Zweige aufspaltet. Beide Zweige sind genauso gültig, also welcher ist “korrekt”? Welcher Miner “gewinnt” den Block und bekommt die 50 CT Blockbelohnung?

Wir kennen den Gewinner noch nicht. Es kommt auf die Miner an, zu entscheiden, welchen Ast sie mit ihren eigenen Blocks verlängern wollen. In Abbildung 4 haben sowohl Tom als auch Qi einen Block auf Höhe 106 produziert. Die verschiedenen Miner denken sich wahrscheinlich folgendes:

Tom

Ich erweitere meinen eigenen Block, denn wenn ich den nächsten Block gewinne, bekomme ich die Belohnung von 2 Blocks.

Qi

Ich erweitere meinen eigenen Block, denn wenn ich den nächsten Block gewinne, bekomme ich die Belohnung von 2 Blocks.

Lisa

Ich verlängere irgendeinen der 2 Blocks, welcher ist mir egal. Ich nehme einfach den ersten, den ich erfolgreich verifiziert habe: Toms Block. Die Blocks mögen nicht genau zeitgleich im Share gelandet sein, also ist es sinnvoll, den ersten zu verlängern, den man sieht.

Wenn sich die Miner den Block auf Höhe 106 ausgesucht haben, den sie verlängern wollen, bauen sie einen neuen Block auf Höhe 107 und fangen wieder an, Zahlen zu ziehen. Aus dieser Situation können sich mehrere Resultate ergeben, vorausgesetzt, alle sind ehrlich: sofortige Lösung, verzögerte Lösung, und ein Split eines Splits.

Sofortige Lösung

Im einfachsten und üblichsten Falle ist genau ein Miner der erste, der eine Glückszahl zieht. Dieses mal ist Lisa diejenige, die Glück hat (Abbildung 5).

07 05
Abbildung 5. Eine sofortige Lösung: Lisa zieht eine Glückszahl.

Lisa erweitert Toms Block, sodass der Ast, an dem Lisa und Tom arbeiten, 1 Block länger wird. Eine Regel für diese Blockchain lautet, dass die längste Blockchain die korrekte ist. Das wird sich später im Kapitel ändern, aber für jetzt folgen wir der längsten Chain.

Qi, die versucht hatte, ihren eigenen Zweig zu verlängern, stellt fest, dass der andere Zweig gerade verlängert wurde, weil Lisa einen neuen Block für diesen Zweig veröffentlich hat. Qi weiss, dass alle diesem Zweig folgen werden. Wenn sie auf ihrem kurzen Zweig bleibt, wird sie wahrscheinlich nie aufholen und länger werden als der andere Zweig. Sie hat mehr davon, wenn sie ihren eigenen, kurzen Zweig verwaisen lässt und auf den längeren Zweig wechselt. Jetzt arbeitet wieder jeder an demselben Zweig, und die Situation ist gelöst.

Das UTXO Set wird aus einer einzigen Chain hergeleitet. Es kann nicht aus mehreren Zweigen gleichzeitig erstellt werden. Full Nodes müssen sich für einen Zweig entscheiden.

Wenn Qi auf den anderen Zweig herüberschwenkt, markiert sie alle Transaktionen ihres alten Zweigs (die nicht bereits im neuen Zeig enthalten sind) als schwebend, oder pending. Die sind jetzt für zukünftige Blocks auf dem neuen Zweig wieder zu haben. Nodes pflegen einen Pool von schwebenden Transaktionen, der üblicherweise als Speicherpool, Memory Pool oder Mempool bezeichnet wird. Eine Transaktion als schwebend zu markieren heisst, sie in den Mempool zu tun.

Indem Qi ihren Zweig aufgegeben hat, hat sie auch auf ihre Blockbelohnung verzichtet. Ihr Block wird niemals Teil der längsten Chain werden, also wird sie nie in der Lage sein, die Blockbelohnung in ihrem Block auszugeben.. Nur Blocks in der längsten Chain haben Einfluss auf das UTXO Set.

Verzögerte Lösung

Aber was wäre gewesen, wenn Lisa und Qi gleichzeitig eine Glückszahl gezogen hätten (Abbildung 6)? Das würde bedeuten, dass beide Zweige um 1 Block erweitert worden wären. Dann wüssten wir immer noch nicht, welcher Zweig der richtige ist. Die Miner würden sich wieder eine Seite aussuchen und versuchen, den Zweig ihrer Wahl zu verlängern.

07 06
Abbildung 6. Lisa und Qi ziehen gleichzeitig eine Glückszahl. Die Situation ist immer noch nicht gelöst.

Sagen wir mal, Tom zieht als Nächster die Glückszahl. Er baut den nächsten Block auf seinem Zweig auf, der jetzt 3 Blocks lang ist. Er wird länger als der andere Zweig, der nur 2 Blocks lang ist (Abbildung 7).

07 07
Abbildung 7. Tom ist der nächste glückliche Gewinner und darf “seinen” Zweig erweitern, der jetzt zum längsten wird.

Jeder Miner bestätigt das, indem er auf Toms Zweig umschwenkt und dort weitermacht. Endlich hat ein Zweig gewonnen. Wieder einmal ist Qi der Verlierer in diesem Kampf.

Split eines Splits

Nehmen wir stattdessen an, Tom und Lisa ziehen gleichzeitig eine Glückszahl. Sie würden dann beide Toms Zweig verlängern.Das Ergebnis wäre ein Split eines Splits (Abbildung 8).

07 08
Abbildung 8. Einer der Zweige erfährt einen weiteren Split. Der neue Split wird genauso gelöst wie der vorige.

Jetzt haben wir drei Zweige. Qis Zweig wird wahrscheinlich verwaisen, weil er kürzer ist als die beiden neuen Zweige, Lisas Zweig und Toms Zweig. Dieser neue Wettbewerb wird sich auf die gleiche Weise lösen wie der erste Split. Er wird gelöst werden.

  • Gleich beim nächsten Block

  • Nach einer Verzögerung, weil 2 Blocks gleichzeitig erscheinen, einer pro Zweig

  • Wenn auf einem der beiden Zweige ein neuer Split geschieht

7.1.3. Wahrscheinlichkeit von Splits

Wissenschaftliche Notation

5.6e-4 = 0.00056 + 2.1e-7 = 0.00000021

\(Xe{-Y}\) ist die Kurzfassung von \(X\times10^{-Y}\)

Irgendwann wird ein Zweig in einem Split gewinnen. Die Wahrscheinlichkeit, dass zwei Zweige der Länge X als nächstes passieren sinkt rapide für steigende X:

Zweiglänge Wahrscheinlichkeit Passiert etwa alle …

1

5.6e-4

2 Wochen

2

2.1e-7

90 Jahre

3

7.6e-11

250,000 Jahre

4

2.8e-14

700,000,000 Jahre

Splits

Splits in Bitcoin passieren seltener als einmal im Monat, und tendenziell werden sie im Laufe der Zeit weniger, weil die Verifikations- und Transportmechanismen effizienter werden.

Dass ein Split von Länge 1 passiert, ist relativ wahrscheinlich, aber ein Split von Länge 2 passiert wahrscheinlich nicht mehr, solange Lisa lebt (sie ist 45). Egal wie lang Splits sind, irgendwann lösen sie sich mit einem Gewinner auf. Das sieht noch einem netten Verfahren aus. Aber es hat Probleme:

  • Man kann bei Glückszahlen mogeln. Man kann nicht beweisen, dass man ehrlich durch Glück eine passende Zahl gefunden hat.

  • [] Mit jedem neuen Miner wird das System robuster gegen Zensur, aber auch empfindlicher gegen private Key Diebstahl. Mehr Computer mit mehr private Keys bedeutet höhere Wahrscheinlichkeit, dass ein Key getohlen wird. Ein gestohlener Blocksignier-private Key lässt einen Dieb Blocks erzeugen, bei denen er mit den Glückszahlen betrügt und die Block-Belohnungen einkassiert.

  • Mit jedem neuen Miner steigt das Risiko, dass ein Miner mit getürkten Glückszahlen mogelt.

  • Man kann nicht einfach neue Miner zum System hinzufügen. Man muss den Schwellwert für die Glückszahlen mit anpassen, wenn mehr Miner dazukommen, damit der Durchschnitt von 10 Minuten pro Block und damit die Geldproduktion bei der gewünschten Rate bleibt.

Offensichtlich kann dieses System die Anzahl Miner nicht über eine kontrollierte Gruppe von vertrauenswürdigen Teilnehmern hinaus erweitern. Man würde mit Blocks geflutet werden, wenn Miner anfangen zu mogeln, aber man könnte ihnen nicht nachweisen, dass sie mogeln. Es kann ja immer sein, dass sie einfach unheimlich viel Glück haben.

7.2. Wo waren wir?

Dieses Kapitel behandelt Proof of Work. Ich habe diesen Begriff noch nicht richtig eingeführt, werde das aber im nächsten Abschnitt tun.

Im Bitcoin Überblick in [ch01], [step-3-the-blockchain]hast du gesehen, dass ein Miner die Führung übernimmt und entscheidet, welche Transaktionen in den nächsten Block kommen und in welcher Reihenfolge. Bitcoin benutzt Proof of Work zur Entscheidung darüber, wer die Führung übernimmt (Abbildung 9).

07 09
Abbildung 9. Proof of Work ist die Methode, wie man einen Anführer wählt, ohne einen Anführer zu haben.

Proof of Work lässt uns ohne zentrale Autorität einen Anführer zufällig unter allen Minern auswählen. Pass in diesem Kapitel gut auf, denn es ist die Essenz von Bitcoin. Es ist das, was Bitcoin wirklich dezentralisiert macht. Wir wollen das System dezentralisiert, weil es dadurch zensurresistent wird. Wenn das System eine zentrale Autorität hat, dann können Transaktionen zensiert werden.

Lisa zu klonen war der erste Schritt zur Dezentralisierung, aber es ist noch nicht perfekt, weil man den Minern trauen muss, dass sie beim Ziehen der Glückszahlen nicht schummeln.

7.3. Erzwingen von ehrlichen Glückszahlen

Was, wenn wir die Miner zwingen könnten, beim Glückszahlen ziehen nicht zu schummeln? Es stellt sich heraus, dass wir das können! Man kann sie zwingen, mit ihren Computern gigantische Mengen an Rechenleistung zu verbrauchen und dann zu beweisen, dass sie diese Arbeit tatsächlich erbracht haben. Man kann sie zwingen, so viel Rechenleistung einzubringen, dass es jeden der Miner im Durchschnitt 30 Minuten kosten würde, einen Block zu erzeugen, was zu 10-minütigen Blockintervallen führen würde, genau wie vorher.

07 10
Abbildung 10. Die Block Signaturen werden durch Proof of Work ersetzt
Herkömmlicher Block
u07 04

Der Trick ist, die digitalen Signaturen im Block Header durch Proof of Work zu ersetzen (Abbildung 10). Nimm an, Qi hat gerade einen Block veröffentlicht und das Café will verifizieren, ob der Block gültig ist. Ausser das übliche Zeug wie Transaktionen und den Merkle Root zu verifizieren, muss der Full Node noch prüfen, ob Qis Block einen gültigen Proof of Work enthält. Der Proof of Work ist dann gültig, wenn der hash des Block Headers–die Block ID–kleiner oder gleich einem vereinbarten Zielwert ist, der im Block Header steht, wie Abbildung 11 darstellt.

Ziele in Bitcoin

Das Ziel wird als 4 Bytes in den Block Header geschrieben; ABCD; das 32 Byte Ziel wird berechnet als BCD × 28*(A-3). Der ergibt BCD mit A-3 Nullbytes dahinter. Das ist deshalb so unelegant, weil wir einen grossen Wertebereich, 1–2256, in nur 32 Bits ausdrücken müssen. Das Ziel in Qis Block steht da als 1c926eb9, also 926eb9 mit 25 Nullbytes danach (1c–3 `= `19, Hexcode für 25).

07 11
Abbildung 11. Die Block-ID muss kleiner oder gleich dem Zielwert im Header sein. Ansonsten ist der Block ungültig.

Die Nonce in diesem Block Header ist 492781982. Qi sucht sich diesen Wert durch Versuch und Irrtum aus. Der nächste Abschnitt erklärt, wie das funktioniert.

Um festzustellen, ob der Proof of Work eines Blocks gültig ist, vergleiche die 256 Bit Block-ID mit dem 256 Bit Ziel, das im Block Header steht. Das Ziel wird in Bitcoin als Target bezeichnet. In Abbildung 11 sind Block-ID und Ziel

Block-ID: 000000003c773b99fd08c5b4d18f539d98056cf72e0a50c1b57c9bc429136e24
Target:   00000000926eb900000000000000000000000000000000000000000000000000

In diesem Beispiel beginnt die Block-ID mit 000000003…, während das Target mit 000000009… beginnt. Die Block-ID ist also kleiner als das Target, was bedeutet, dass der Proof of Work des Blocks gültig ist.

Das Target ist eine Zahl, auf die sich alle Nodes und Miner geeinigt haben. Dieses Target ändert sich gelegentlich gemäss einiger gemeinsamer Regeln. Eine solche Änderung wird als retarget bezeichnet, und ich beschreibe es in einem späteren Abschnitt. Für den Moment kann man es als eine feste Zahl betrachten, die im Block Header gesetzt werden muss.

7.3.1. Produktion eines gültigen Proof of Work

Um einen neuen Block zu erzeugen, muss ein Miner ein gültigen Proof of Work für den Block produzieren, bevor der Block als gültig durchgeht. Um einen gültigen Proof of Work zu schaffen, muss der Miner einen Block Header Hash erzeugen, der kleiner oder gleich dem Target im Block Header ist.

Input Hash

Hello1!

8264…6e64

Hello2!

493c…14f8

Hello3!

9048…0bae

Eine Block-ID ist ein Doppel-SHA256 des Block Headers. Wie wir in [ch02] gelernt haben, besteht der einzige Weg, ein Pre-Image für einen kryptografischen Hash zu finden darin, immer wieder verschiedene Inputs durchzuprobieren, bis man ein passendes findet. Hier gilt dasselbe; der Miner muss verschiedene Block Header ausprobieren, bis er einen findet, der zu einem Hashwert führt, der kleiner oder gleich dem Target ist.

Springen wir mal in der Zeit zurück und schauen, wie Qi ihren Block erzeugt hat. Sie erzeugt den Block, setzt das Target auf 00000000926e…, und setzt die Nonce auf 0. Dann prüft sie, ob der Proof of Work gültig ist (Abbildung 12).

07 12
Abbildung 12. Qi testet, ob ihr Block gültig ist, indem sie ihren Proof of Work verifiziert.

Sie berechnet die Block-ID, indem sie ihren Block Header mit Doppel-SHA256 hasht. In diesem Fall ist die Block-ID aa9c614e7f50…. Diese Zahl ist grösser als das Target.

Block-ID: aa9c614e7f5064ef11eedc51856cc7bfcdf71a1f2d319e56d4cc65bda939be79
Target:   00000000926eb900000000000000000000000000000000000000000000000000

Die Regel besagt, dass die Block-ID kleiner oder gleich dem Target sein muss, damit der Proof of Work gültig ist. Qi scheitert kläglich.

Nonce

Die Nonce ist eine 32 Bit Zahl, also gibt es “nur” 232 = 4,294,967,296 mögliche verschiedene Nonces zum durchprobieren.

Hier kommt die Nonce ins Spiel. Eine Nonce ist einfach eine alberne Zahl, die nichts bedeutet. Sie kann auf jeden beliebigen Wert gesetzt werden. Qi setzt sie anfangs auf 0, aber sie könnte sie genausogut auf 123 oder 92178237` setzen. Die Nonce hilft, den Block Header abzuwandeln, ohne irgendwelche echten Daten zu ändern, wie Transaktionen oder Vorgänger Block-ID.

Qi probiert jetzt wieder, einen gültigen Proof of Work zu erzeugen. Sie erhöht die Nonce von 0 auf 1 und prüft die Gültigkeit erneut (Abbildung 13).

07 13
Abbildung 13. Qi erhöht die Nonce und unternimmt einen zweiten Versuch, einen gültigen Proof of Work zu finden. Auch dies scheitert.

Wenn Qi den Block Header durch Variieren der Nonce ändert, ändert sich die Block-ID–jede kleinste Änderung im Header führt zu einer völlig anderen Block-ID. Das ist dieselbe Eigenschaft, die in [cryptographic_hashing] in [ch02] dargestellt wurde, als wir das Katzenbild geändert haben (Abbildung 14).

07 14
Abbildung 14. Änderungen am Input einer kryptografischen Hashfunktion führen zu einem völlig anderen Output.

Die neue Block ID ist 863c9bea5fd8… Auch sie ist grösser als das Target. Qi scheitert erneut. Es tut mir leid, aber es führt kein Weg daran vorbei–Qi muss es erneut probieren. Sie erhöht die Nonce von 1 auf 2 und testet erneut (Abbildung 15).

07 15
Abbildung 15. Qis dritter Versuch, einen gültigen Proof of Work zu finden. Sie scheitert schon wieder.

Das Resultat ist dasselbe: ein jämmerlicher Fehlschlag. Die Block ID war diesmal 005ce22db5aa…, was immer noch grösser ist als das Target.

Sie wiederholt dies immer und immer wieder Zum Beispiel zeigt Abbildung 16 ihren 227.299.125ten Versuch.Es war knapp, aber knapp reicht nicht. Sie muss weiter probieren (Abbildung 17). Und schliesslich erhält sie das in Abbildung 18 dargestellte Ergebnis.

07 16
Abbildung 16. Qis Versuch mit Nonce 227.299.124. Knapp daneben ist auch vorbei!
07 17
Abbildung 17. Qi arbeitet weiter.
07 18
Abbildung 18. Die Nonce 492781982 ist der Gewinner!

Die Nonce 492781982 resultiert in der Block ID 000000003c77…. Sie vergleicht dies mit dem Target:

Block-ID: 000000003c773b99fd08c5b4d18f539d98056cf72e0a50c1b57c9bc429136e24
Target:   00000000926eb900000000000000000000000000000000000000000000000000

Wow–diese Block ID ist kleiner als das Target! Qi hat einen Haufen Arbeit geleistet, um eine Nonce zu finden, die in einer Block ID kleiner als das Target resultiert. Sie hat einen Block mit einem gültigen Proof of Work erzeugt. Toll, jetzt wird sie ihren Block im Share veröffentlichen.

Es ist wichtig, sich darüber klar zu sein, dass Miner ihre eigenen Blocks individuell zusammensetzen. Tom arbeitet zum Beispiel an seinem eigenen Block gleichzeitig mir Qi (und Lisa), aber seine Menge der Transaktionen ist anders als Qis, weil seine Coinbase Transaktion die Blockbelohnung an ihn zahlt, während Qis Coinbase Transaktion die Blockbelohnung Qi zukommen lässt. Dieser Unterschied sorgt dafür, dass der Merkle Root in ihren jeweiligen Block Headern sich unterscheidet. Wenn Tom Qis gewinnende Nonce, 492781982, in seinen eigenen Block einbaut, wird er das Target vermutlich nicht erreichen. Andere Dinge, die sich wahrscheinlich unterscheiden, sind der Zeitstempel und die Liste der ausgewählten Transaktionen.

7.3.2. Warum ist das so gut?

Jeder kann einen Block aus dem Share nehmen und prüfen, dass die Regeln eingehalten wurden–die Block ID ist kleiner oder gleich dem vereinbarten Target. Block Verifizierung ist jetzt ein wenig anders als vorher (Abbildung 19).

07 19
Abbildung 19. Die Blockverifikation hat sich geändert. Der Prüfer braucht nichts mehr ausser dem Block.
Blocks sind in sich abgeschlossen

Man braucht nichts von ausserhalb der Blockchain, um den Block zu prüfen.

Der Unterschied zum Verifizieren eines digital signierten Blocks ist, dass der Full Node prüft, ob der Blockproduzent einen gültigen Proof of Work geliefert hat, anstatt einer digitalen Signatur.

Mit Proof of Work braucht man nichts anderes als den Block selbst, um die Frage seiner Gültigkeit zu klären. Vorher hatte man Zeug von ausserhalb der Blockchain benötigt–den public Key des Miners vom schwarzen Brett. Das ist ein grosser Sprung Richtung Dezentralisierung. Keine zentralen Quellen für public Keys verbleiben, die manipuliert werden können.

7.3.3. Vergleich mit Glückszahlen

Die Blockchain wird weiter so wachsen wie bisher, aber das Ziehen der Gewinnzahlen wird ersetzt durch das Hashen der Block Header (Abbildung 20). Tabelle 1 vergleicht die beiden Systeme.

07 20
Abbildung 20. Die Blockchain arbeitet genauso wie mit den Glückszahlen.

0,02 Mikrosekunden sind nur ein Beispiel dafür, wie lange ein “Versuch” dauern kann. Das variiert von Miner zu Miner.

Anstatt jede Sekunde eine Zufallszahl zu ziehen, ziehen die Miner etwa alle 0,02 Mikrosekunden eine Zahl durch einen kryptografischen Hash. Gleichzeitig wird die Grenze für die Glückszahl von 555 auf die 256 Bit Zahl 00000000926e…=926eb9*2200 angehoben.

Tabelle 1. Vergleich des Glückszahlensystems mit dem Proof of Work System
Verfahren Target Mögliche Werte Ziehe alle Blockintervall Beste Chain bei Split

Glückszahlen

555

1,000,000

Sekunde

10 Minuten

Grösste Länge

Proof of Work

926eb9*2200

2256

0.02 Mikrosekunden

10 Minuten

Meiste Arbeit

Subtiler aber wichtiger Unterschied ist, dass bei Proof of Work die Chain mit dem grössten gesammelten Proof of Work als die beste Chain gilt, der man folgen soll. Im Fall der Glückszahlen folgen Nodes der längsten Chain. Der gesammelte Proof of Work für eine Blockchain ist die Summe der Schwierigkeit aller Einzelblocks der Chain.

Die Schwierigkeit oder Difficulty eines Blocks wird darin gemessen, wie viel schwieriger es ist, einen gültigen Proof of Work für diesen Block zu finden im Vergleich damit, einen für den Genesis Block zu finden.

Genauer gesagt wird die Difficulty von Block B wie folgt berechnet:

\[\frac{\mathrm{Target\ des\ Genesis\ Blocks}}{\mathrm{Target\ von\ }B}=\frac{(2^{16}-1)*256^{26}}{\mathrm{Target\ von\ }B}\]

Das Target des Genesis Blocks wird durch das Target von B geteilt, was die Difficulty des Genesis Blocks zu genau 1 macht.

Das Wesentliche daran ist, dass je höher das Target eines Blocks ist, desto niedriger seine Difficulty ist, und je niedriger das Target, desto höher die Difficulty. Also summieren wir die Difficulties aller Blocks auf, und erhalten den gesammelten Proof of Work.

Stärkste Chain

Die stärkste Chain ist diejenige mit dem grössten gesammelten Proof of Work.

Von nun an werde ich den Zweig mit dem grössten gesammelten Proof of Work als den stärksten Zweig oder die stärkste Chain bezeichnen. Ein anderer gebräuchlicher Begriff ist beste Chain. Die Unterscheidung zwischen längster und stärkster Chain wird in Abschnitt 7.5.2 wichtig, wenn ich Anpassungen der Schwierigkeit, oder Difficulty Adjustments, vorgestellt haben werde.

7.3.4. Was ist, wenn die Nonce nicht reicht?

Die Nonce ist eine 32 Bit Zahl. Das ist ziemlich klein. Wenn ein Miner alle 4.294.967.296 möglichen Zahlen erfolglos durchprobiert hat, muss er etwas anderes tun, um den Block Header zu ändern. Ansonsten würde er genau dieselben Versuche nochmal machen, die er schon probiert hat. Es gibt verschiedene Optionen für solche Änderungen (Abbildung 21):

  • Kleine Änderung am Zeitstempel.

  • Hinzufügen, Löschen, oder Rearrangieren von Transaktionen.

  • Ändern der Coinbase Transaktion.

07 21
Abbildung 21. Der Block Header kann auf verschiedene Arten verändert werden.

Den Zeitstempel zu ändern ist recht geradlinig–addiere einfach eine Sekunde auf den Zeitstempel und der Header sieht anders aus. Wenn man eine der anderen Optionen benutzt, wird man den Merkle Root neu berechnen müssen, weil die Transaktionsdaten geändert wurden. Wenn der Merkle Root sich ändert, ändert sich auch der Header.

Führt man irgendeine dieser Änderungen am Block durch, so ändert sich der Header, sodass die Nonce wieder bei 0 anfangen und der Miner wieder mit dem Hashen beginnen kann.

7.4. Miner müssen ausziehen

Die Firma findet das Proof of Work System schön und gut, will aber nicht den Strom bezahlen, der für all diese Arbeit benötigt wird. Weil Computer mit Strom laufen, braucht ein Computer mehr Strom, je mehr Berechnungen er durchführt.

Die Firma entscheidet, dass die Miner ihre Mining Software woanders laufen lassen sollen, zum Beispiel bei ihnen zu Hause. Das ist fair. Schliesslich bekommen die Miner 50 CT für jeden Block, den sie finden. Der Strom, den es sie kostet, einen Block zu produzieren, kostet weniger als das. Der aktuelle Marktpreis von 50 CT sind 5 Kekse im Café, und jedes Cookie Token wird derzeit zu 20 Cent gehandelt. Jeder Block gibt einem Miner etwa $10 an Cookie Tokens, was angesichts der Tatsache, dass sie etwa 48 Blocks pro Tag produzieren, nicht schlecht ist.

Schauen wir uns kurz die Hashrate unserer drei Miner an. Die Hashrate ist eine Masseinheit dafür, wie viele Hashes (Versuche) sie pro Sekunde schaffen:

Miner Hashrate (Millionen Hashes/s) Erwartete Blocks/Tag

Lisa

100

48

Tom

100

48

Qi

100

48

Summe

300

144

Das System wird etwa 144 Blocks pro Tag produzieren, was im Durchschnitt etwa 1 Block alle 10 Minuten bedeutet.

7.4.1. Mehr Hashrate kommt dazu

Ein interessanter Aspekt dieses Systems ist, dass jeder ein Miner werden kann, ohne um Erlaubnis zu fragen. Jeder kann einfach einen Computer daheim aufstellen und anfangen, Blocks zu bauen. Blocks sind nicht mehr an eine Person gebunden, sondern an eine Menge an Computerleistung:

Lisa holt sich mehr Hashrate

Lisa findet das Geschäft, von zu Hause zu minen, lukrativ. Sie beschliesst, einen zweiten, ähnlichen Computer zuhause aufzustellen, was im Effekt ihre Hashrate verdoppelt.

Rashid wird Miner

Rashid möchte auch beim Minen mitmachen. Er stellt sich zuhause einen Computer auf, der im Wettbewerb um neue Blocks mitmacht. Sein Computer ist etwas schneller als die seiner Konkurrenten, daher erwartet er mehr Blocks pro Tag als, zum Beispiel, Qi.

Nach Lisas und Rashids zusätzlichen Hashrate hat sich die gesamte Hashrate im Cookie Token System deutlich erhöht:

Gesamte Bitcoin Hashrate

Zum Zeitpunkt des Schreibens ist die Hashrate von Bitcoin etwa 50 Exahashes/s. das sind 50 × 1018 Hashes/s.

Miner Hashrate (Millionen Hashes/s) Erwartete Blocks/Tag

Lisa

200

96

Tom

100

48

Qi

100

48

Rashid

150

72

Summe

550

264

Sieh mal: wir produzieren mehr Blocks pro Tag als geplant! Das Ziel ist 144 Blocks pro Tag, und 264 ist erheblich mehr als das. Die Block Rate ist zu hoch, fast das Doppelte des gewünschten Wertes.

7.4.2. Probleme bei hoher Blockrate

Eine höhere Blockrate mag vorteilhaft erscheinen, weil mit ihr die Bestätigungszeit für Transaktionen sinkt, birgt aber einige Probleme.

Zu schnelle Geldschöpfung
u07 06

Erinnerst du dich an die Geldschöpfungskurve aus [ch02]? Der Plan war, die Hälfte des Geldes, 10,5 Millionen CT, während der ersten vier Jahre herauszugeben; während der nächsten vier Jahre die Hälfte dessen, 5,25 Millionen CT; und so weiter, bis sich die Emissionsmenge auf 0 abrundet. Dieser ganze Prozess würde etwa 131 Jahre dauern.

Jetzt, weil Lisa ihr Mining hochgerüstet und Rashid seinen Mining Computer eingebracht hat, ist die Emission zu schnell. Mit dieser hohen Blockrate wird es nur halb so lange dauern, bis alle Cookie Tokens erzeugt wurden.

Das bedeutet, die erhöhte Emissionsrate beträgt 264/144 = 1.8 Mal die gewünschte Emissionsrate.

Mehr Splits

Spits kommen ganz natürlich ab und zu vor. Aber wenn die Blockrate steigt, nimmt das Risiko natürlicher Splits zu. Stell dir vor, wenn 3000 Leute daheim im Keller minen würden. Das würde die Blockrate um den Faktor 1000 erhöhen. Jede einzelne Sekunde würden mehrere Miner einen gültigen Proof of Work finden und einen Block veröffentlichen. Es gäbe fast auf jeder Blockhöhe einen Split. Das macht Transaktionen in jüngeren Blocks weniger zuverlässig, weil diese Blocks leichter von der besten Chain abgespalten werden können.

Es wäre auch aus Sicht der Verlässlichkeit oder Security problematisch, denn wenn zwei Zweige ungefähr 50% der gesamten Hashrate haben, ist die Security jedes Zweiges halbiert. Wir reden in Abschnitt 7.6 mehr über Security.

7.4.3. Was wurde behoben?

Wir haben auf eine interessante Weise das schwierige Problem gelöst, “ehrliche Glückszahlen” zu erzwingen . Lasst uns mal schauen, welche Probleme aus Abschnitt 7.1.3 verbleiben:

  • [ x] Man kann bei Glückszahlen mogeln. Man kann nicht beweisen, dass man ehrlich durch Glück eine passende Zahl gefunden hat.

  • Mit jedem neuen Miner wird das System robuster gegen Zensur, aber auch empfindlicher gegen private Key Diebstahl. Mehr Computer mit mehr private Keys bedeutet höhere Wahrscheinlichkeit, dass ein Key gestohlen wird. Ein gestohlener Blocksignier-private Key lässt einen Dieb Blocks erzeugen, bei denen er mit den Glückszahlen betrügt und die Block-Belohnungen einkassiert.

  • [x ] Mit jedem neuen Miner steigt das Risiko, dass ein Miner mit getürkten Glückszahlen mogelt.

  • Man kann nicht einfach neue Miner zum System hinzufügen. Man muss den Schwellwert für die Glückszahlen mit anpassen, wenn mehr Miner dazukommen, damit der Durchschnitt von 10 Minuten pro Block und damit die Geldproduktion bei der gewünschten Rate bleibt.

Es verbleibt nur noch ein Problem in der Liste. Das werden wir im nächsten Abschnitt ändern.

7.5. Difficulty Anpassungen

Jetzt, da wir mehr Miner und mehr Hashrate zum System hinzugefügt haben, hat sich die Blockrate erhöht. Denn die Miner arbeiten gemeinsam mehr Versuche pro Sekunde ab als vorher, was zur Produktion von mehr Blocks pro Stunde führt.

Zwar haben sich alle auf ein Target im Block Header geeinigt, aber man muss noch den Schwierigkeitsgrad für das Minen eines Blocks anpassen, um einer erhöhten oder verringerten Hashrate Rechnung zu tragen. Das Target wird alle 2.016 Blocks neu kalibriert. Diese Neujustierung der Schwierigkeit wird Difficulty Adjustment oder Retarget genannt, und die 2.016 Block Periode heisst Retarget Period. Jeder Block enthält ja eine Coinbase Transaktion, die 50 neue Cookie Tokens erzeugt. Wir wollen im Durchschnitt 1 Block alle 10 Minuten, damit es bei der gewünschten Ausgaberate für neue Cookie Tokens bleibt. Das entspricht zwei Wochen für 2.016 Blocks.

War die letzte Retarget Period länger als zwei Wochen, muss das Target erhöht werden, um die Wahrscheinlichkeit zu erhöhen, dass ein Block Header Hash es erfüllt. Wir verringern also die Schwierigkeit. Wenn die Retarget Period weniger als zwei Wochen lang war, müssen wir das Target senken, um die Wahrscheinlichkeit zu senken, dass es erfüllt wird. Wir erhöhen also dann die Schwierigkeit.

Das neue Target, \(N\), wird berechnet als \(N=O \times F\), wobei \(O\) das alte Target ist und \(F\) ein Target-Änderungsfaktor, der von der letzten Retarget Period abhängt, wie Abbildung 22 zeigt.

07 22
Abbildung 22. Kalibrierung des Targets auf Basis der letzten 2.016 Blocks. Das Ziel ist 2.016 Blocks in zwei Wochen.

Allgemein gesprochen, berechnen wir das neue Target, \(N\), aus \(O\) und der Dauer \(T\) der letzten Retarget Period wie folgt:

\[N= O*\left\{ \begin{array}{ll} \frac{1}{4} & \mbox{if } T \lt 0.5 \\ \frac{T}{2} & \mbox{if } 0.5 \leq T \leq 8 \\ 4 & \mbox{if } 8 \lt T \end{array} \right.\]

Das Target kann sich nicht um mehr als den Faktor 4 oder um weniger als den Faktor 1/4 verändern, um den Effekt gewisser Double-Spend Attacken zu begrenzen, bei denen jemand ein Opfer von den ehrlichen Netzwerkknoten isoliert, um die Difficulty zu ihren Gunsten zu verändern. Mehr darüber kannst du in [web-target-change] lesen.

7.5.1. Regeln für Timestamps

Timestamps werden auch für diverse Schnörkel in Transaktionen benutzt. Mehr dazu gibt es in [ch09].

Der Block Header enthält einen Timestamp. Timestamps sind wichtig, weil das System das Target automatisch, ohne menschlichen Eingriff, so kalibrieren soll, dass alle 10 Minuten 1 Block produziert wird. Die Blockerzeugungsrate ist wichtig, weil wir eine vorhersehbare Ausgabegeschwindigkeit neuer Cookie Tokens haben wollen.

Der Miner, der einen Block erzeugt, setzt den Timestamp auf die aktuelle Zeit, bevor er einen Proof of Work produziert. Weil aber verschiedene Full Nodes auf unterschiedlichen Computern laufen, sind deren Uhren nicht unbedingt vollständig synchron.

Angenommen Lisa produziert einen Block mit Timestamp 2017-08-13 07:33:21 UTC und veröffentlicht ihn auf dem Share. Tom produziert den nächsten Block, aber seine Uhr hinkt hinter Lisas Uhr hinterher.

Tom produziert einen Block mit einem früheren Timestamp als der vorherige Block. Das ist kein Problem, solange die Timestamps sich nicht zu sehr unterscheiden (Abbildung 23).

07 23
Abbildung 23. Zwei Blocks mit abnehmenden Timestamps werden produziert. Das ist OK.

Der Timestamp muss ein paar Regeln folgen. Angenommen der Full Node des Cafés ist dabei, Toms Block zu verifizieren:

  • Der Timestamp muss strikt später sein als der Median der vorangegangenen 11 Timestamps. Dieser Median wird üblicherweise als die Median Time Past, der Vergangenheitsmedian, bezeichnet.

  • Der Timestamp darf höchstens zwei Stunden in der Zukunft liegen, laut der Uhr des Cafés.

Diese Regeln garantieren, dass niemand die Timestamps seiner Blocks manipuliert, um die nächste Target Berechnung zu beeinflussen. Stell dir vor, der letzte Block vor einem Retarget hätte einen Timestamp sechs Wochen in der Zukunft. Das würde dazu führen, dass das nächste Target um den Faktor 4 erhöht wird, wie Tabelle 2 zeigt.

Tabelle 2. Ein böser Miner manipuliert den letzten Timestamp der 2.016 Blocks vor einem Retarget. H ist die erste Block Height einer Retarget Periode. Das neue Target wird um den Faktor 4 steigen.
Block Height Timestamp (ohne Sekunden) Abgelaufene Timestamp Zeit

H

2017-07-31 06:31

0

H+1

2017-07-31 06:42

11:17

…​

…​

…​

H+2013

2017-08-14 07:22

2 Wochen und 51 min

H+2014

2017-08-14 07:33

2 Wochen und 1h 2 min

H+2015

2017-09-25 08:51

8 Wochen und 2h 20 min

Der letzte Timestamp ist sechs Wochen später als die Zeit, zu der der Block tatsächlich erzeugt wurde. Alle Full Nodes werden den Block zurückweisen, weil er die Timestamp Regeln verletzt. Jemand will das Target manipulieren. Würde dieser Block akzeptiert werden, wäre das nächste Target viermal so gross wie das jetzige, womit das Finden eines Proof of Work viermal so leicht wäre. Diese Art von Fehlverhalten wird wie beschrieben durch die Timestamp Regeln verhindert. Dadurch, dass man mit dem Timestamp nicht um mehr als zwei Stunden schummeln kann, kann das nächste Target höchstens marginal manipuliert werden.

7.5.2. Chain Stärke vs Chain Länge

Kommen wir zurück zu der Diskussion über Chain Stärke und darüber, weshalb es wichtig ist, nicht einfach auf die Länge der Chain zu schauen. Es ist intuitiv plausibel, dass je schwerer die Chain Historie zu ändern ist, desto besser, sodass man der stärksten Chain folgen sollte. Aber wann unterscheiden sich die stärkste und die längste Chain voneinander?

Sie können sich aus verschiedenen Gründen unterscheiden:

  • Natürlicher Split direkt vor einem Retarget

  • Versehentliche Splits aufgrund inkompatibler Software Versionen

  • Absichtliche Splits als Angriff auf die ehrliche Chain

Wir betrachten hier nur die erste Option. Angenommen ein natürlicher Split passiert (Abbildung 24).

07 24
Abbildung 24. Ein natürlicher Split mit unterschiedlichen Timestamps zwischen den Zweigen wird im Fall eines Retarget einen Zweig stärker als den anderen werden lassen.
Timestamps

Timestamps dürfen der tatsächlichen Zeit nicht mehr als zwei Stunden vorauseilen.

Es ist ein unwahrscheinliches Szenario, aber wir müssen es betrachten, weil es passieren kann. Ein Split geschieht direkt vor einem Retarget, und die Timestamps der 2 Blocks unterscheiden sich um vier Stunden. Als nächstes werden gleichzeitig 2 neue Blocks produziert, einer auf jedem Zweig. Diese Blocks wurden auf Basis ihrer unterschiedlichen Historien mit neuen Targets versehen. Die letzten Timestamps in den jeweiligen Retarget Perioden unterscheiden sich um vier Stunden, was zu Unterschieden in den neuen Targets führt. Erinnern wir uns an die Retarget Formel:

\[N= O*\left\{ \begin{array}{ll} \frac{1}{4} & \mbox{if } T \lt 0.5 \\ \frac{T}{2} & \mbox{if } 0.5 \leq T \leq 8 \\ 4 & \mbox{if } 8 \lt T \end{array} \right.\]

Weil die neuen Targets sich unterscheiden ist die neue Difficulty im letzten Block jedes Zweiges verschieden. Das bedeutet, die Chain Stärke unterscheidet sich, weil die beiden Zweige nun einen unterschiedlichen akkumulierten Proof of Work haben.

7.6. Was können Miner anstellen?

In [ch06] haben wir dafür gesorgt, dass Lisa Transaktionen nicht rückgängig machen konnte, ohne dass ihre versuchte Schummelei aufflog. Das haben wir dadurch erreicht, dass Lisa die Blocks digital signieren muss, sodass jeder sehen kann, dass Lisa den Block akzeptiert hat. Wenn sie später einen konkurrierenden Block auf derselben Block Height signiert, der ihre Transaktion durch eine Transaktion ersetzt, die an sie selbst zahlt, wird das jeder merken und sie zur Rechenschaft ziehen.

Jetzt ist die Situation eine andere. Lisa signiert ihre Blocks nicht mehr. Die Blocks sind anonym–nichts verbindet Lisa mit einem bestimmten Block. Heisst das nicht, dass sie wieder double-spenden kann?

Naja, schon, wenn sie sehr viel Glück hat.

7.6.1. Double Spending

Angenommen Lisa ist gerade dabei, einen Keks im Cafe zu bezahlen. Aber gleichzeitig mit der Zahlung bereitet sie auch eine Double-Spend Transaktion vor (Abbildung 25).

07 25
Abbildung 25. Lisa erzeugt zwei Transaktionen, die einen gemeinsamen Output ausgeben.

C ist die Transaktion zum Café. L ist Lisas Double-Spend Transaktion, die sie benutzen wird, um ihr Geld zurück zu stehlen. Beide Transaktionen sind für sich gesehen vollkommen gültig, aber beide können nicht gleichzeitig gültig sein, weil beide den gleichen Output ausgeben. Ein Output kann nur einmal ausgegeben werden.

List schickt die ehrliche Zahlung, C, an alle Miner. Während die anderen Miner versuchen, ihre ehrliche Transaktion in einen Block zu stecken und einen gültigen Proof of Work zu berechnen, tut Lisa die Double-Spend Transaktion in einen eigenen, geheimen Block und fängt an, auf diesem zu arbeiten (Abbildung 26).

Lisas Ziel ist, einen gültigen Proof of Work für ihren betrügerischen Zweig mit L zu finden, der grösser ist als der Proof of Work der ehrlichen Chain. Wenn sie das geschafft hat, wird sie alle Blocks in ihrem Zweig veröffentlichen und alle Miner werden auf ihren Zweig umschwenken und beginnen, ihren Zweig zu verlängern statt den bisherigen. Der Einfachheit halber nehmen wir an, dass all dies ohne Retargets (Difficulty Adjustments) geschieht; wir sind mitten in einer Retarget Periode. Das bedeutet, alle Blocks haben dasselbe Target (bzw. dieselbe Difficulty), sodass wir einfach die Zweiglänge betrachten anstatt der Zweigstärke (den akkumulierten Proof of Work).

07 26
Abbildung 26. Lisa zieht eine Double-Spend Attacke durch–und ist trotz ihrer geringen Hashrate erfolgreich.

Eine Gruppe Miner versuchen, Lisas ehrliche Transaktion C zu bestätigen, während Lisa am Proof of Work für ihren Block mit der Double-Spend Transaktion L arbeitet. Das Café wartet auf eine gültige Transaktion, bevor es den Keks herausgibt.

Welchem Zweig soll man folgen?

Ein Miner muss nicht immer auf dem ersten gesehenen Block aufbauen. Aber die am weitesten verbreitete Bitcoin Software, Bitcoin Core, folgt dem zuerst gesehenen Block.

Irgendwann wird die ehrliche Transaktion auf der ehrlichen Chain bestätigt. Das Café sieht den Block, verifiziert ihn und gibt Lisa den Keks. Lisa isst ihn auf. Während sie die letzten Krümel herunterschluckt, findet ihr Computer zufällig einen gültigen Proof of Work für ihren Block. Sie veröffentlicht ihren Block noch nicht, weil ihr das nichts nützen würde. Die Miner sind auf der ehrlichen Chain bereits am weiterarbeiten, weil sie dort zuerst einen Block gesehen haben.

Die kombinierte Hashrate aller Miner auf der ehrlichen Chain ist 350 MHash/s, wogegen Lisa nur 200 MHash/s besitzt. Das bedeutet, die ehrliche Chain sollte Blocks häufiger finden als Lisa.

Aber jeder hat einmal Glück. Lisa hat glücklicherweise den Proof of Work für einen weiteren Block in ihrem betrügerischen Zweig gefunden. Jetzt hat sie 2 Blocks auf ihrem Zweig, wogegen der ehrliche Zweig nur 1 Block lang ist. Lisa hat mehr gesamten Proof of Work auf ihrer Chain als die ehrlichen Miner auf deren Zweig. Lisa veröffentlicht die 2 Blocks auf dem Share.

Andere Miner werden diese 2 Blocks sehen, und dass Lisas Zweig mehr Proof of Work als der ehrliche Zweig hat, und werden auf Lisas Zweig herüber schwenken. Die Miner, die schwenken, können nicht sehen, dass ein Betrug stattfand, oder wer den Block erzeugt hat; sie springen neutral auf die längste gültige Chain.

Das Resultat ist, dass Transaktion C an das Café effektiv annulliert wurde. Sie gehört nicht mehr zu der Chain mit dem meisten Proof of Work. Das Café hat die 10 CT verloren, die es glaubte bekommen zu haben, als es Lisa einen Keks gab.

Von diesem Punkt an werden neue Blocks Lisas Zweig verlängern und die Dinge werden normal weiterlaufen. Der Block mit Transaktion C wird verfallen.

7.6.2. Schutz vor Double-Spend Attacken

Obwohl die Chancen gegen Lisa stehen, könnte sie Glück haben und mit einer Double-Spend Attacke erfolgreich sein, wie in dem vorigen Beispiel. Einen Double-Spend von 10 CT durchzuziehen ist aus Lisas Sicht ökonomisch nicht plausibel. Sie riskiert, enorme Mengen Energie zu verbrauchen und ihren eigenen Block verfallen zu sehen, falls es nicht klappt. Sie würde die Blockbelohnung aus diesen verfallenen Blocks verlieren.

Aber was, wenn sie versucht, einen grösseren Betrag als 10 CT doppelt auszugeben, sagen wir 100.000 CT? Dann wäre es für Lisa die Sache wert, einen Double-Spend zu versuchen. Stell dir vor, sie würde das ganze Café kaufen und dabei eine Double-Spend Attacke abziehen. Dann würde sie das Café besitzen und hätte immer noch ihre 100.000 CT.

Der Cafébesitzer ist gewillt, Lisa das Café für 100.000 CT zu verkaufen. Aber das Café weiss natürlich um die Gefahr einer Double-Spend Attacke. Also sagt der Cafébesitzer, dass er bei so viel Geld Lisa das Café erst nach sechs Bestätigungen überschreiben wird.

Was bedeutet dies? Lisa muss dem Cafébesitzer 100.000 CT bezahlen und dann warten, bis die Transaktion in einem Block bestätigt wird und 5 weitere Blocks auf diesem Block aufbauend produziert worden sind. Erst dann wird der Besitzer das Café an Lisa übergeben.

Um eine Double-Spend Attacke durchzuziehen, muss Lisa insgeheim einen alternativen Zweig aufbauen, genau wie in ihrer vorherigen Attacke, während das Café sechs Bestätigungen abwartet. Wenn der Cafébesitzer sechs Bestätigungen gesehen und Lisa das Café übergeben hat, muss sie irgendwann einen stärkeren Double-Spend Zweig in den Share hochladen. Das bedeutet, Lisa muss eine längere Zeit Glück haben als im vorangegangenen Beispiel.

Schauen wir mal, wie es läuft (Abbildung 27).

07 27
Abbildung 27. Lisa probiert eine Double-Spend Attacke mit sechs Bestätigungen. Sie scheitert.

Der Ausgang ist der Erwartete. Lisa konnte auf die Dauer nicht mehr Blocks als die ehrliche Chain produzieren. Sie hat bei 7–4 aufgegeben.

Die folgende Tabelle zeigt die Abfolge der Ereignisse in diesem Beispiel:

Ereignis Stand (C-L) Kommentar

1, 2

0-0

Lisa beginnt auf ihrem geheimen Zweig zu minen, der die Double-Spend Transaktion enthält. Sie schickt auch eine Zahlung an die ehrlichen Miner.

3

0-1

Lisa findet einen Block, hält ihn aber geheim. Das Café soll nicht merken, dass eine Double-Spend Attacke im Gange ist.

4

1-1

Die ehrliche Zahlung, C, wird zum ersten Mal bestätigt. Das Café wird vor Abschluss des Deals 5 weitere Blocks abwarten.

5, 6, 7, 8, 9

5-4

Lisa kommt einigermassen mit, liegt aber einen Block zurück und muss 2 Blocks mehr als das Café produzieren.

10

6-4

Die ehrliche Transaktion hat sechs Bestätigungen. Lisa bekommt das Café. Die Eigentumsurkunde wird unterschrieben. Lisa versucht weiter, aufzuholen.

11

7-4

Lisa flucht leise. Die Wahrscheinlichkeit, 4 Blocks mehr als die ehrliche Chain zu finden, ist winzig.

Lisa gibt aus verschiedenen Gründen auf:

  • Ihr wird klar, dass sie nicht genug Hashrate hat, um aufzuholen und die ehrliche Chain zu überholen. Zu jedem Zeitpunkt beträgt die Wahrscheinlichkeit, dass Lisa den nächsten Block findet, 200/550 = 0,36. Das bedeutet, die Wahrscheinlichkeit, dass die ehrlichen Miner den nächsten Block finden, bei 1 – 0,36 = 0,64 liegt. Blocks werden auf der ehrlichen Chain viel schneller gefunden.

  • In jeder Minute, die sie es versucht, verbraucht ihr Computer Strom, der Geld kostet. Wenn sie mit dem Double-Spend Versuch nicht durchkommt, sind die Stromkosten verschwendet.

  • Für jeden Block, den sie auf ihrer eigenen Chain produziert, verliert sie die 50 CT Block Reward, wenn sie scheitert.

Bestätigungen / Confirmations

Bei sechs Confirmations, also Bestätigungen in Form aufeinander aufbauender Blocks, kann man ziemlich sicher sein, dass niemand einen per Double-Spend Attacke angreift. Aber je höher der Transaktionswert, desto ökonomisch sinnvoller ist es, eine Double-Spend Attacke zu versuchen.

Das Entscheidende ist hier, dass das Café sechs Confirmations verlangt hatte. Je mehr Confirmations verlangt werden, desto schwieriger ist es für Lisa, einen stärkeren Zweig als die ehrlichen Miner zu bauen. Sie bräuchte mehr Glück.

Als das Café seine sechs Confirmations bekommen hatte, lag Lisa 2 Blocks zurück. Sie hätte schneller als die ehrliche Chain wachsen und 1 Block länger als die ehrliche Chain werden müssen. Ihre Chancen waren gering. Je mehr Blocks sie aufholen musste, desto geringer wurden die Chancen, wie Tabelle 3 zeigt.

Tabelle 3. Wahrscheinlichkeit, dass ein Angreifer aufholt, aus Sicht des Angreifers

Aufzuholende Blocks (z)

Wahrscheinlichkeit \(q_z\) des Angreifers aufzuholen, wenn er \(q%\) Hashrate besitzt

1%

10%

18% (Tom)

36% (Lisa)

45%

50%

1

0.010101

0.111111

0.219512

0.562500

0.818182

1.000000

2

0.000102

0.012346

0.048186

0.316406

0.669421

1.000000

3

1.0e-06

0.001372

0.010577

0.177979

0.547708

1.000000

4

1.0e-08

0.000152

0.002322

0.100113

0.448125

1.000000

5

1.1e-10

0.000017

0.000510

0.056314

0.366648

1.000000

6

1.1e-12

1.9e-06

0.000112

0.031676

0.299985

1.000000

10

1.1e-20

2.9e-10

2.6e-07

0.003171

0.134431

1.000000

Die Wahrscheinlichkeit \(q_z\) ergibt sich aus

\[q=\mathrm{angreifende\ hashrate} \\ p=\mathrm{ehrliche\ hashrate} \\ z=\mathrm{aufzuholende\ Blocks} \\ q_{z}= \left\{ \begin{array}{ll} 1 & \mbox{if } p \leq q \\ (\frac{q}{p})^z & \mbox{if } q \gt p \\ \end{array} \right.\]

Schauen wir in die Spalte für die 36% Hashrate, die Lisa hat. Wenn sie 3 Blocks zurück liegt, muss sie in der nächsten Zeit 4 Blocks mehr als die ehrlichen Miner produzieren. Damit hat sie eine 0,10 Chance, mit diesem Double-Spend jemals durchzukommen–sofern sie bereit ist, die Attacke unbegrenzt fortzuführen. Sie wird aber wahrscheinlich nicht ewig weiter probieren, was ihre Aussichten auf Erfolg weiter schmälert.

Tom probiert auch einen Double-Spend

Stell dir vor, Tom versucht einen Double-Spend anstatt Lisa (Abbildung 28). Er hat nur die Hälfte der Hashrate von Lisa, 100 MHash/s.

07 28
Abbildung 28. Tom probiert einen Double-Spend mit 18% Hashrate und gibt auf. Mit Glück finder er 2 Blocks in ungefähr der gleichen Zeit, in der die ehrlichen Miner 3 Blocks finden.

Toms Chancen stehen schlechter als Lisas. Er hat ein bisschen Glück und findet früh 2 Blocks, aber nachdem er 2 Blocks hinter die ehrlichen Miner zurückfällt, hält er seine Chancen für zu gering und gibt auf. Noch 3 weitere Blocks produzieren zu müssen als die ehrlichen Miner, mit einer Erfolgswahrscheinlichkeit von etwa 0,011 (stem\:[z=3]) ist ein schrecklicher Gedanke.

Tom ist ein schlauer Bursche und weiss, dass er das nicht probieren sollte. Ihm ist klar, dass er besser damit bedient ist, mit allen anderen zusammen die Blockchain abzusichern und seinen fairen Anteil zu bekommen, als zu versuchen, sich anzugreifen. Mit seinen 18% bekommt er schliesslich fast jeden fünften Block Reward. Das sind mehr als 50 CT pro Stunde. Nach 2.000 Stunden, oder 12 Wochen, hätte er mehr als 100.000 ehrliche Cookie Tokens verdient, anstatt zu versuchen, welche zu stehlen.

Tom und Lisa kollaborieren beim Double-Spend

Gemeinsam haben Tom und Lisa 300 MHash/s. Sie kontrollieren mehr als 50% (54,5%) der gesamten Hashrate (Abbildung 29).

07 29
Abbildung 29. Verteilung der Hashrate. Zwei Miner kollaborieren, um die Mehrheit der Hashrate zu kontrollieren.

Wenn sie bei einer Double-Spend Attacke kooperieren, und bereit sind, dies unbegrenzte Zeit fortzusetzen, sind ihre Chancen auf Erfolg 100% (Tabelle 3). Wenn sie es nur, sagen wir, 50 Blocks lang probieren wollen, liegen ihre Chancen immer noch sehr nahe bei 100%. Dieses erschreckende Szenario bedeutet, Tom und Lisa können beliebig die Geschichte neu schreiben. Sie sind schneller als die gesamte Hashrate aller ehrlichen Miner. Sie können einen Zweig von einem beliebigen Block in der Blockchain Historie erzeugen, ihren Weg zur Spitze der ehrlichen Chain hoch bahnen, und diese überholen. Dann werden alle Miner zu Tom und Lisas Zweig umschwenken. Sie können wohlgemerkt immer noch nicht das Geld von irgendjemandem in der Blockchain stehlen, aber sie können so viele Double Spends durchführen, wie sie wollen.

Spielen wir mal mit der Idee, dass Tom und Lisa anfangen mit dem Double-Spending. Zum Beispiel kaufen sie das Café und Double-Spenden die Transaktion sodass sie sowohl das Café als auch die 100.000 CT haben. Immer ab und zu werden Leute merken, dass sich die Geschichte in der Blockchain geändert hat. Sechs Confirmations waren für Transaktionen früher zuverlässig, aber jetzt kann man ihnen nicht mehr trauen. Was geschieht mit dem Wert der Cookie Tokens, wenn die Blockchain unzuverlässiger wird? Und was geschieht mit dem Wert der Cookie Tokens, wenn die Leute von den Angriffen durch Double-Spend Attacken hören?

Panik! Die Leute wollen nichts mehr mit diesem unzuverlässigen, unsicheren Cookie Token System zu tun haben. Viele Leute werden all ihre Cookie Tokens auf dem Cookie Token Markt ausserhalb des Cafés verkaufen. Das Problem ist, dass es nicht viele Käufer gibt. Was passiert mit dem Dollarpreis der Cookie Tokens, wenn die Nachfrage niedrig und das Angebot hoch sind? Der Preis stürzt ab.

Was passiert, wenn der Preis abstürzt? Mehr Panik. Mehr Leute wollen verkaufen, was zu noch grösseren Preisstürzen führt.

Das Mining Geschäft von Tom, Lisa und den anderen Minern wird weniger profitabel, weil der Wert der Block Rewards so gering ist, dass sie ihre Cookie Tokens nicht für genug Dollars verkaufen können, um die Stromrechnung zu bezahlen. Sie müssen den Mining Betrieb schliessen, weil sie mit Verlust arbeiten.

Tom und Lisa sollten sich zweimal überlegen, ob sie das System angreifen wollen, auch wenn sie das könnten. Allein die Tatsache, dass zwei Miner zusammen mehr als 50% der gesamten Hashrate kontrollieren, könnte schon ausreichen, einen Preissturz auszulösen, weil die Leute nervös werden bezüglich Mining Centralization–wenn wenige Leute einen grossen Teil der gesamten Hashrate kontrollieren. Sie brauchen das System nicht einmal anzugreifen, um die Cookie Tokens im Wert sinken zu lassen.

Mining Centralization entschärfen

Was können die Leute gegen Toms und Lisas Machtfülle tun? Sie können anfangen, zuhause zu minen. Sagen wir, fünf weitere Leute steigen ins Mining Geschäft ein, und jeder bringt einen Computer mit 150 MHash/s ein. Dann ergibt sich eine völlig neue Situation (Abbildung 30).

07 30
Abbildung 30. Neue Hashratenverteilung. Es ist viel schwieriger, Kontrolle über die Mehrheit der Hashrate zu erlangen.
Bitcoin Hashratenverteilung

Zum Zeitpunkt des Schreibens waren Bitcoins 50 EHash/s wie folgt verteilt (Quelle: blockchain.info):

u07 10

Die Verteilung wandelt sich ständig, aber das sollte uns eine Idee davon geben, wie es in der Realität aussehen kann.

Die gesamte Hashrate erhöht sich von 550 MHash/s auf 1.300 MHash/s. Lisa, als grösster Miner mit 200 MHash/s, hat jetzt nur noch circa 15% der gesamten Hashrate. Mindestens fünf Miner müssten zusammenarbeiten, um die Mehrheit der Hashrate zu kontrollieren, weil die grössten vier Miner zusammen 49.9% kontrollieren.

Die Motivation für die Leute, mit dem Mining anzufangen, ist hoch. Sie haben Cookie Tokens, und sie wollen, dass das System stark bleibt, um ihr Geld vor Panik-Preiseinbrüchen aufgrund von Miner Centralization zu bewahren.

Wohlgemerkt sinken mit zunehmender Anzahl Miner die Rewards pro Miner. An irgendeinem Punkt wird ein Miner–wahrscheinlich ein ineffizienter–der Ansicht sein, dass sich Mining nicht mehr lohnt, und seine Mining Computer abschalten. Der Markt verdrängt dann die ineffizienten Miner zugunsten der effizienten.

7.7. Transaktionsgebühren

Das jetzt bestehende System lässt viele Miner unabhängig voneinander Blocks erzeugen. Das ist ein gewaltiger Zuwachs an Zensurfestigkeit. Alle Miner müssten kollaborieren, um Transaktionen am Eingang in die Blockchain zu hindern. Ein einzelner Miner oder ein Teil der Miner kann nur dafür sorgen, dass Transaktionen länger brauchen, bis sie bestätigt werden, aber irgendwann wird einer der nicht zensierenden Miner einen gültigen Proof of Work für einen Block finden, der die bisher zensierte Transaktion enthält, und den Block veröffentlichen.

Alles gut. Aber es gibt zwei Probleme:

  • Grössere Blocks sind langsamer.

  • Die Blockgrösse ist begrenzt.

Diese beiden Eigenschaften haben Einfluss darauf, wie die Miner sich die Transaktionen für ihre Blocks aussuchen. Betrachten wir zunächst das erste dieser Probleme, und diskutieren wir dann, welchen Effekt die Begrenzung der Blockgrösse haben wird.

7.7.1. Grössere Blocks sind langsamer

Angenommen, Lisa und Tom finden gleichzeitig einen gültigen Proof of Work für ihren jeweiligen Block. Lisas Block ist 200 KB gross und enthält 400 Transaktionen, wohingegen Toms Block 100 KB gross ist und 200 Transaktionen enthält. Beide wollen, dass ihr Block Teil der stärksten Chain wird, aber nur einem der beiden kann das gelingen. Sie beginnen genau gleichzeitig damit, ihre jeweiligen Blocks in den Share hochzuladen (Abbildung 31).

07 31
Abbildung 31. Lisa und Tom wetteifern darum, dass Qi und die anderen Miner auf Basis ihres Blocks weitermachen. Tom gewinnt das Rennen, weil sein Block kleiner ist.

Toms Block ist kleiner als Lisas. Das bedeutet, Tom wird seinen Block schneller in den Share hochladen als Lisa ihren. Es ist auch schneller für Qi, Toms Block herunterzuladen als Lisas. Und schliesslich muss Qi die Blocks, die sie herunterlädt, verifizieren, bevor sie darauf aufbaut. Ein kleiner Block ist typischerweise schneller zu verifizieren als ein grosser, sodass auch hier Toms Block schneller ist als Lisas.

Das Ergebnis ist, dass Qi zur Zeit T Toms Block als aktuell beste Chain Tip auswählt und beginnt, auf Basis von Toms Block zu minen. Lisas Block existiert für Qi zum Zeitpunkt T eigentlich gar nicht, weil sie ihn noch nicht verifiziert hat. Sie lädt Lisas Block immer noch vom Share herunter. Wenn Qi zum Zeitpunkt L endlich Lisas Block verifiziert, hat sie bereits entschieden, Toms Block zu benutzen und Lisas Block wird für den Fall einer späteren Chain Reorganisation abgespeichert.

Miner haben einen klaren Anreiz, ihre Blocks klein zu halten. Für jede zusätzliche Transaktion, die sie zu ihren Blocks hinzunehmen, verlieren sie ein wenig an Wettbewerbsfähigkeit im Block Rennen.

7.7.2. Aber ging es nicht um Transaktionsgebühren?

Hier kommen die Transaktionsgebühren ins Spiel. Wenn die Miner ein bisschen extra Geld für jede Transaktion bekommen, die sie in den Block mit hineinnehmen, würden sie dadurch für den Verlust an Wettbewerbsfähigkeit entschädigt werden.

Zahlende Kunden möchten ihre Transaktionen gern in der Blockchain bestätigt bekommen. Wäre es nicht schön, wenn John ein bisschen Geld in der Transaktion hinterlegen würde für den Miner, der sie einbaut? Auf diese Weise könnte der Zahlende den Miner für den Verlust an Wettbewerbsfähigkeit entschädigen.

Wenn wir die Transaktionen ein bisschen anders verwenden, können wir diese Eigenschaft anbieten. Sagen wir mal, John will einen Keks kaufen. Um den Minern einen Anreiz zu geben, seine Transaktion einzubetten, fügt er eine Transaktionsgebühr hinzu. Er konstruiert seine Transaktion wie in Abbildung 32 dargestellt.

07 32
Abbildung 32. John bringt eine Gebühr, oder Fee, für den Miner ein, der den Block mit seiner Transaktion produziert.

Als John eine ähnliche Transaktion in [ch05] erzeugt hat, war die Summe der Inputs gleich der Summe der Outputs. Er hatte keine Transaktionsgebühr bezahlt.

Ein halber CT?

Cookie Tokens und bitcoins können in winzige Bruchteile aufgeteilt werden. Die kleinste mögliche Bitcoin Einheit ist der satoshi: 1 sat = 10-8 bitcoin.

Diesmal will John eine kleine Transaktionsgebühr zu seiner Transaktion hinzunehmen. Er gibt zwei Inputs im Wert von zusammen 13 CT aus, und fügt der Transaktion einen Output von 10 CT an das Café und einen Change Output von 2,5 CT an sich selbst hinzu. Dann signiert er die Transaktion ganz wie gewohnt und schickt sie an alle Miner.

Lisa, die Minerin, erhält die Transaktion von John. Sie bemerkt, dass eine Transaction Fee von 0,5 CT darin ist. Sie möchte diese Fee haben und beschliesst, dass diese Gebühr sie mehr als genug für den winzigen Verlust an Wettbewerbsfähigkeit im Blockrennen entschädigt, der durch die Vergrösserung ihres Blockes um diese Transaktion entsteht.

John kann den Anreiz für die Miner, seine Transaktion hinzuzunehmen, fein steuern. Ist es ihm wichtig, dass diese Transaktion in einem der nächsten Blocks bestätigt wird, so sollte er eine relativ hohe Fee bezahlen. Wenn er keine Eile hat, kann er eine geringe Gebühr bezahlen, muss aber vorsichtig sein. Bezahlt er zu wenig, so wird gar kein Miner gewollt sein, die Transaktion zu bestätigen.

Wir sprechen mehr über Fees und darüber, wie man die Gebühr einer Transaktion ändern kann, wenn sie im Zustand ausstehend, oder pending, hängen bleibt–das wird auch als fee bumping bezeichnet—in [ch09].

Fees (Gebühren) in Bitcoin

Zur Zeit der Drucklegung wird normalerweise eine Fee von 4 sat/Byte benötigt, um eine Transaktion in einen der nächsten 6 Blocks zu bekommen. Eine normale Transaktion, 500 Bytes, würde also 0,00002BTC oder etwa 20 Cent kosten.

Das einzige, was Lisa interessiert, wenn sie entscheidet, ob sie eine Transaktion in den aktuellen Block mit hineinnehmen soll, ist die Grösse der Transaktion und die Fee, die sie ihr zahlt. Im Grunde ist es die Fee pro Byte, die sie interessiert. Johns Transaktion ist etwa 400 Bytes gross und bezahlt eine Gebühr von 0,5 CT. Das sind 0,00125 CT/Byte. Das ist für Lisa einfach zu rechnen, und sie tut dasselbe mit allen Transaktionen. Wenn die Fee pro Byte oberhalb eines gewissen Schwellwerts liegt, nimmt sie die Transaktion in den Block mit hinein.

Sie kann sich auf beliebigem Wege die Transaktionen heraussuchen, wie in [transaction-selection] beschrieben. Zum Beispiel kann sie ihre eigene Transaktion ohne Fee mit dazu nehmen, oder sie kann alle Transaktionen ausschliessen, mit denen Kekse bezahlt werden, egal wie hoch die Fee auch sein mag. Andere Miner werden andere Strategien für die Transaktionsauswahl benutzen. Die meisten werden wohl auf Basis der Fee pro Byte entscheiden.

Wie bekommt Lisa die Fee? Indem sie ihre Coinbase Transaktion benutzt (Abbildung 33).

07 33
Abbildung 33. Lisa arbeitet an einem Block, und sie hat Johns Transaktion und ein paar andere mit in den Block hineingenommen. Sie sammelt die Gebühren im Coinbase Output.

Lisa summiert alle Gebühren von allen Transaktionen in ihrem Block auf und erhöht den Coinbase Output um diesen Betrag. Der Betrag in diesem Coinbase Output–der Block Reward–ist die Summe aus der Block Subvention, also die 50 neuen Cookie Tokens, die dieser Block erzeugt, und allen Transaction Fees der Transaktionen in diesem Block. Merke, dass wir den Begriff Block Reward so erweitert haben, dass er sowohl die Block Subvention (das neu geschaffene Geld) als auch die Transaction Fees enthält.

Wenn der Block korrekt vorbereitet ist, beginnt Lisa damit, einen gültigen Proof of Work für den Block zu suchen.

7.7.3. Blockgrösse ist beschränkt

Blocks dürfen nicht beliebig gross werden. Einfach gesagt ist die maximale Blockgrösse 1.000.000 Bytes, aber wir diskutieren die Feinheiten in [block-size-limit]. Wenn mehr Transaktionen auf Bestätigung warten als Blockplatz, oder Block Space, verfügbar ist, müssen die Miner aussuchen, welche Transaktionen sie in einen Block hereinnehmen und welche sie aussen vor lassen.

Die Transaktionsgebühr spielt hierbei eine wichtige Rolle, weil eine höhere Transaktionsgebühr den Minern mehr Anreiz gibt, diese Transaktion gegenüber anderen bevorzugt in den Block zu integrieren. Die Gebühr dient, zusätzlich zu seiner Funktion als Kompensation für verringerte Wettbewerbsfähigkeit, auch zum Wettbewerb mit den anderen Transaktionen um den Blockplatz. Diese Situation wird als Gebührenmarkt oder Fee Market (Abbildung 34). bezeichnet.

07 34
Abbildung 34. In einem Fee Market konkurrieren Transaktionen um Block Space. Die Zahlen in den Transaktionen bezeichnen den Gebührenpegel, oder Fee Level, in CT/Byte.

Steht mehr Block Space zur Verfügung, als Transaktionsdaten auf Bestätigung warten, konkurrieren Transaktionen nicht im gleichen Sinne miteinander (Abbildung 35).

07 35
Abbildung 35. Ohne Fee Market konkurrieren Transaktionen nicht miteinander. Sie müssen lediglich für den Verlust an Wettbewerbsfähigkeit aufkommen.

In dieser Situation wird jede Transaktion bestätigt, die die Kosten für verlorene Wettbewerbsfähigkeit zahlt.

Derzeit entstehen gelegentlich Gebührenmärkte, wenn das Interesse an Bitcoin gerade hochschnellt. Aber es gibt auch Zeiten, in denen wenige oder gar keine Transaktionen auf Bestätigung warten, in welchen Fällen die Gebühren dann niedrig sind, typischerweise 1 sat/Byte, 0der 0,000.000.01 BTC/Byte.

7.7.4. Wenn die Block Subsidy 0 ist

Wie wir in [ch02] besprochen haben, halbiert sich die Block Subvention ungefähr alle vier Jahre. Irgendwann wird die Blocksubvention allein nicht mehr ausreichen, um den Minern einen Anreiz zum Minen zu geben. Wenn der Wert des Block Rewards unter der Stromrechnung liegt, wozu soll man dann minen?

Transaction Fees werden mit abnehmender Blocksubvention eine immer grössere Rolle spielen. Der typische Miner will, dass seine Einkünfte vom Minen mindestens die Stromkosten abdeckt (Abbildung 36).

07 36
Abbildung 36. Ein Miner muss mindestens ausreichend Geld erwirtschaften, um die Stromkosten zu decken.

Beachte, dass der Wert der Blocksubvention im Laufe der Zeit nicht unbedingt abnehmen muss. Tabelle 4 zeigt ein paar Beispiele.

Tabelle 4. Die Blocksubvention mag sich halbieren, aber ihr Wert hängt vom Preis der Cookie Tokens ab.
Block Subvention Wert von 1 CT Wert der Block Subvention

50 CT

$0,10

$5

25 CT

$0,25

$6,25

Dies zeigt, dass die Blocksubvention allein kein Mass des Mining Einkommens darstellt. Wir müssen den Wert der Blocksubvention und den Wert der Transaktionsgebühren betrachten. Eines ist sicher: Wenn die Subvention auf Null fällt, ist der Wert der Subvention auch Null. An irgendeinem Punkt wird die Bocksubvention nicht mehr genug Ansporn sein, zu minen.

Wenn das passiert, werden die Transaction Fees den effizienten Minern helfen, Umsatz zu machen. Wenn John seine Transaktion bestätigt haben will, muss er eine Gebühr zahlen, die hoch genug ausfällt, dass einer oder mehrere Miner sie in ihren Block aufnehmen. Das ist ein Markt für Blockplatz in Aktion.

Lightning Network

Mehr Information über das Lightning Network gibt es auf [web-lightinig-network]. Leider ist in diesem Buch kein Platz für dieses interessante und komplexe Thema.

Wir können über die zukünftigen Gebührenhöhen nur spekulieren. Manche argumentieren, dass die Gebühren von Bitcoin bereits zu hoch sind für die Art und Weise, wie sie es benutzen wollen. Wenn Transaction Fees steigen, dann werden einige Anwendungsfälle für Bitcoin–zum Beispiel Zahlungen von Kleinbeträgen–andere Wege finden müssen, um zu funktionieren. Derzeit werden auf Basis von Bitcoin neue Systeme entwickelt, die es ermöglichen, nahezu unbegrenzte Mengen von Zahlungen zu nur ein oder zwei Transaktionen zusammenzufassen. Ein solches System, Lightning Network, ist besonders interessant. Wenn mit einer einzigen Bitcoin Transaktion eine Million Zahlungen abgewickelt werden können, dann teilen sich alle Transaktionen die Kosten für die Transaktionsgebühr.

7.8. Zusammenfassung

Dieses Kapitel hat das Problem der Zensur gelöst. Lisa hatte absolute Macht darüber, welche Transaktionen Eingang in die Blockchain finden. Wir haben dies gelöst durch den Einsatz mehrerer “Lisas,” oder Miner. Weil wir das taten, können Wallets ihre Transaktionen an mehrere oder alle Miner schicken, und einer dieser Miner wird die Transaktion hoffentlich verarbeiten.

Die Miner konkurrieren um die Produktion des nächsten Blocks in den Blockchain. Sie wetteifern darum, der erste zu sein, der einen gültigen Proof of Work für seinen Block findet.

u07 11

Der Miner, der das Rennen macht, veröffentlicht seinen Block und kassiert den Block Reward, der aus der Blocksubvention und den Transaction Fees besteht. Der Reward wird in der Coinbase Transaktion gesammelt.

u07 12

Die Blocksubvention dient zur fairen Verteilung neuen Geldes in das Wirtschaftssystem, bis alle 21.000.000 neuen Cookie Tokens erzeugt sind. Der Absender einer Transaktion fügt dieser eine Transaktionsgebühr bei, um den Minern einen Anreiz zu geben, die Transaktion in ihren Block hineinzunehmen.

Dieser Wettbewerb führt zu natürlichen Splits, wenn zwei Miner ungefähr gleichzeitig einen Block finden. Diese Splits lösen sich irgendwann auf.

u07 13

Die Lösung hängt davon ab, welchen Zweig die Miner zum weiterarbeiten auswählen. Normalerweise arbeiten sie auf dem ersten Block weiter, den sie sehen.

Ein Händler sollte einer Transaktion von hohem Wert nicht trauen, bis eine ausreichend hohe Anzahl Blocks produziert worden ist auf Basis des Blocks, der die fragliche Transaktion enthält. Das verringert das Risiko von Double-Spends.

u07 14

Es kann für einen Miner teuer sein, einen Double-Spend zu versuchen. Wenn es schiefgeht, wird der Miner eine Menge Strom verschwendet und all seine Block Rewards verloren haben. Die Wahl der Anzahl Confirmations hängt vom Händler ab und sollte den Transaktionswert in Betracht ziehen.

7.8.1. Systemänderungen

Proof of Work ersetzt die Block Signaturen, die wir in [ch06] eingeführt hatten, und wir können diese aus der Konzept-Mapping-Tabelle entfernen (Tabelle 5).

Tabelle 5. Die Block Signaturen sind durch das Bitcoin Konzept des Proof of Work ersetzt worden. Lisa hat sich in einen von mehreren Minern verwandelt.

Cookie Tokens

Bitcoin

Behandelt in

1 Cookie Token

1 bitcoin

[ch02]

Lisa

Ein Miner

Kapitel 7

Block Signatur

Proof of Work

Kapitel 7

Shared Folder

Das Bitcoin Netzwerk

[ch08]

Lisa erledigt exakt dieselben Arbeiten wie ein Bitcoin Miner, weshalb wir Lisa ebenfalls aus der Tabelle entfernt haben. Der Shared Folder wird das letzte Stück vom Cookie Token System sein, dessen wir uns annehmen. Das kommt im nächsten Kapitel.

Es ist Zeit, eine schillernde neue Version des Cookie Token Systems vorzustellen (Tabelle 6).

Tabelle 6. Release Notes, Cookie Tokens 7.0
Version Feature Wie

new7.0

Zensurresistent

Multiple Miner, “Lisas,” ermöglicht durch Proof of Work

Jeder darf beim Mining mitmachen

Automatische Difficulty Anpassungen

6.0

Hindert Lisa am Löschen von Transaktionen

Signierte Blöcke in einer Blockchain

Voll validierende Nodes

Lädt und verifiziert die gesamte Blockchain

Lightweight Wallet spart Daten

Bloom Filter und Merkle Proofs

5.0

Mehrere “Coins” in einer Zahlung

Mehrere Inputs in Transaktionen

Jeder kann das Spreadsheet überprüfen

Signaturen in Transaktionen öffentlich einsehbar

Sender legt Kriterien für das Ausgeben fest

Script Programme in Transaktionen

7.9. Übungen

7.9.1. Wärm dich auf

  1. Inwiefern war Lisa eine zentrale Autorität in [ch06]?

  2. Warum sollte die Möglichkeit der Zensur von Transaktionen bei mehreren Minern, oder “Lisas,” abnehmen?

  3. Zufallszahlen zu ziehen funktionierte ganz gut, aber wir haben die Idee verworfen. Warum war die Idee naiv?

  4. Wie prüft man die Gültigkeit eines Proof of Work?

  5. Wie erzeugt ein Miner einen validen Proof of Work?

  6. Was bedeutet Stärkste Chain?

  7. Was bedeutet es, wenn ein Miner eine Hashrate von 100 MHash/s hat?

  8. Eine Retarget-Periode ist gerade zu Ende gegangen, und die Produktion der letzten 2.016 Blöcke dauerte 15 Tage. Wird das Ziel zunehmen oder abnehmen?

  9. Bei welchem Prozentsatz der Hashrate kann man sich sicher sein, einen Double Spend erfolgreich durchführen zu können, wenn du bereit bist, es beliebig lang zu probieren?

7.9.2. Grabe tiefer

  1. Angenommen ein grosser Block und ein kleiner Block werden gleichzeitig erzeugt. Warum ist es für den grossen Block weniger wahrscheinlich, in die Blockchain aufgenommen zu werden als für den kleinen?

  2. Angenommen die Block Rate verdoppelt sich plötzlich genau in der Mitte einer Retarget Periode. Sie springt von durchschnittlich 6 Blocks pro Stunde auf 12 Blocks pro Stunde. Sonst passieren keine weiteren Änderungen während der Retarget Periode. Was passiert mit dem Target nach Ablauf dieser Periode?

  3. Angenommen Selma besitzt 52% der Hashrate. Sie beschliesst, die Retarget Periode ihres Software Programms von 2.016 Blocks (zwei Wochen) auf 144 Blocks (ein Tag) zu ändern. Niemand sonst hält das für eine gute Idee, und sie lassen weiter ihre alte Software laufen. Was passiert nach ihrer nächsten Retarget Periode von einem Tag, wenn sie ihr Target neu justiert? Wird der Rest der Miner und Full Nodes Selmas Blocks akzeptieren? Wer wird unter dieser Situation leiden?

  4. Warum würde ein Miner entscheiden, eine Transaktion nicht zu bestätigen, die eine sehr kleine Transaction Fee zahlt?

7.10. Zusammenfassung

  • Mehrere Miner zu haben, vermeidet eine zentrale Autorität, die Transaktionen zensieren könnte.

  • Proof of Work wird benutzt, um zu finden, wer einen Block an die Blockchain hängen darf.

  • Proof of Work ermöglicht es jedem, zu minen, ohne um Erlaubnis zu fragen.

  • Das Target wird automatisch alle 2.016 Blocks kalibriert, um die Geldausgabe auf der festgelegten Rate zu halten.

  • Eine Transaction Fee gibt den Minern einen Anreiz, die Transaktion in einen Block zu integrieren.

  • Um das Risiko von Double Spends niedrig zu halten, legt der Empfänger von Cookie Tokens, oder bitcoins, fest, wie viele Confirmations benötigt werden.

  • Ein Miner bekommt so viel in Block Rewards, wie er verdient. Je mehr Hashrate er in das System steckt, desto grösser wird sein Anteil an den Rewards.

  • Je stärker eine Chain ist–je mehr gesammelten Proof of Work sie enthält–desto schwerer ist es, die Chain nachträglich zu ändern.