11. Bitcoin Upgrades

Dieses Kapitel behandelt

  • Verstehen von Hard Forks und Soft Forks

  • Bitcoin sicher upgraden

  • Verstehen, dass die Benutzer die Regeln machen

Um dieses Kpaitel zu verstehen, solltest du dich mit Konzepten wie Blockchain ([ch06]), Proof of Work ([ch07]), und dem Peer-to-Peer Netzwerk ([ch08]) auskennen. Wenn du mit diesen Kapiteln Schwierigkeiten hattest, schlage ich vor, du liest sie noch mal durch, bevor du mit diesem Kapitel hier weitermachst. Natürlich kannst du auch einfach versuchen, weiterzulesen.

Bitcoins Konsensregeln können sich auf zwei Arten ändern: entweder per Soft Fork oder per Hard Fork. Diese zwei Typen von Änderung sind grundverschieden. In Abschnitt 11.1 wirst du die Unterschiede zwischen Hard Forks und Soft Forks kennenlernen und was geschieht, wenn verschiedene Nodes unterschiedliche Konsensregeln verwenden. Du musst das verstehen, bevor du lernen kannst, wie man sicher Bitcoins Konsensregeln upgraden kann.

Eine Änderung der Konsensregeln über das ganze Bitcoin Netzwerk auszurollen, kann schwierig sein. Jeder Bitcoin Node ist selbständig, und niemand kann vorschreiben, was für Software die Leute laufen lassen sollen–jeder Benutzer entscheidet für sich selbst. Das macht es schwierig, Änderungen an Konsensregeln auszurollen, zu deployen, ohne breiten Support der Benutzer und der Miner zu haben. Die Deployment Mechanismen haben sich im Laufe der Zeit entwickelt und wir gehen durch diese Entwicklung durch und untersuchen den aktuellen Stand der Deployment Mechanismen.

Zum Zeitpunkt des Schreibens dieser Zeilen sind die meisten (unkritischen) Updates an Bitcoins Konsensregeln durch Miner-aktivierte Soft Forks ausgerollt worden, bei denen Miner Unterstützung für neue Regeln signalisieren und irgendwann auch anfangen, die neuen Regeln durchzusetzen. Aber dieser Ansatz bietet einige Probleme–zum Beispiel kann ein grosser Miner trotz weitgehender Benutzerakzeptanz ein Veto gegen einen Upgrade einlegen. Man versucht, dies durch Benutzer-aktivierte Soft Forks, also User Activated Soft Forks, UASF, zu lösen. Das bedeutet, die Macht ist dort, wo sie hingehört: bei den Benutzern von Bitcoin, der wirtschaftlichen Mehrheit. Es ist die wirtschaftliche Mehrheit, die schlussendlich und kollektiv über die Konsensregeln entscheidet, und diese Einsicht wurde mit Benutzer-aktivierten Soft Forks in die Praxis umgesetzt.

11.1. Bitcoin Forks

Open Source Software ist Software, die jeder nach Belieben herunterladen, benutzen, untersuchen, ändern und weiter verteilen kann. Eine Menge der Software, die du täglich benutzt, ist wahrscheinlich Open Source. Vielleicht benutzt du den Google Chrome Web Browser oder ein Android Mobiltelefon. Das sind Beispiele für Software, die auf Basis von Open Source Projekten entstanden ist.

Open Source Projekte können abgespalten, oder forked, werden. Wenn du eine Kopie des Source Codes von Linux machst, ein paar Änderungen vornimmst, und es als deine Version vom Linux Source Code vertreibst, hast du eine Fork des Projekts erzeugt.

Bitcoin ist ein Open Source Projekt, das genau wie jedes andere Open Source Projekt, wie etwa Linux, geforkt werden kann. Aber in diesem Buch bedeutet Fork etwas anders.

Abweichende Definitionen

Man definiert den Begriff Fork auf verschiedene Weisen. In diesem Buch benutze ich die Definition, die mir a, meisten zusagt, und die lautet, eine “Änderung der Konsensregeln.”

Im Bitcoin Kontext bezeichnet der Begriff Fork eine Änderung der Konsensregeln. Die Konsensregeln definieren, was eine gültige Blockchain ist. Wenn eine Gruppe Nodes dieselben Konsensregeln benutzt, entsteht unter ihnen ein Konsens darüber, was der aktuelle Satz unverbrauchter Transaktions Outputs (UTXO Set)–“wem gehört was”–ist. Kurz, eine Fork ändert die Definition einer gültigen Blockchain.

Zum Beispiel ist die Regel, die das Blockgewicht auf 4.000.000 WU begrenzt, eine Konsensregel. Dieses Limit zu ändern, wäre eine Fork. Aber eine Relay Policy, die Transaktionen mit einzigen Gebühren am weitergeleitet werden hindert, ist nicht Teil der Konsensregeln. Diese Policy zu ändern ist keine Fork.

Du kannst die Konsensregeln in Bitcoin Core ändern, in einer kopierten Version von Bitcoin Core, oder in irgendeiner alternativen Bitcoin Full Node Software. Wenn jemand dein modifiziertes Programm laufen lässt, betreibt diese Person eine Fork.

Wir kategorisieren Forks in Bitcoin allgemein wie folgt (Abbildung 1):

Hard Forks

Eine Hard Fork lockert die Konsensregeln. Einige Blocks, die von ALT Nodes als ungültig eingestuft werden, werden von NEU Nodes für gültig betrachtet. Verdoppeln des maximalen Blockgewichts wäre eine Hard Fork.

Soft Forks

Eine Soft Fork strafft die Konsensregeln. Alle Blocks, die NEU Nodes als gültig betrachten, werden auch von ALT Nodes als gültig angesehen, aber einige Blocks, die ALT Nodes für gültig halten, werden von NEU Nodes für ungültig erklärt. Eine Verringerung des maximalen Blockgewichts wäre eine Soft Fork.

11 01
Abbildung 1. Soft Forks engen die Konsensregeln ein, wogegen Hard Forks sie erweitern–zum Beispiel Verkleinern respektive Vergrössern des maximalen Blockgewichts.

Änderungen, die nicht die Konsensregeln ändern, wie das Ändern der Farben in der grafischen Benutzerschnittstelle, oder das Hinzufügen neuer Features zum Peer-to-Peer Netzwerkprotokoll, sind keine Bitcoin Forks. Sie könnten aber als Forks eines Software Projekts im herkömmlichen Sinne betrachtet werden. Von hier an werde ich den Begriff Fork nur im Sinne von Änderungen der Konsensregeln benutzen.

u11 01

Als Analogie zu Soft und Hard Forks stell dir ein beliebtes vegetarisches Restaurant von, wo viele Vegetarier zum Essen hingehen. Dieses Restaurant hat nur ein einziges Menü auf der Speisekarte. Stell dir das Restaurant als einen Miner vor, die Gäste als Full Nodes und die servierten Portionen als Blocks. Das Restaurant produziert Mahlzeiten, die die Gäste verspeisen–die Miner produzieren Blocks, die Full Nodes akzeptieren diese.

Stell dir vor, das Restaurant ändert seine Karte so wie in Tabelle 1 illustriert.

Tabelle 1. Das Restaurant kann eine Hard Fork erzeugen, indem es Fleisch auf die Speisekarte schreibt, oder eine Soft Fork, indem es seine Speisen auf den veganen Bereich einschränkt.
Vegetarisches Restaurant serviert … Akzeptieren die Gäste das? Fork Typ Weshalb

Vegetarisches Essen

Ja

Keiner

Vegetarier essen vegetarisches Essen.

Nichtvegetarisches Essen

Nein

Hard Fork

Die Regeln wurden gelockert. Vegetarier können hier nicht mehr essen.

Veganes Essen

Ja

Soft Fork

Die Regeln wurden gestrafft. Vegetarierregeln gelten weiter.

Wenn du eine Fork erzeugst, egal ob Soft oder Hard, riskierst du einen Chain Split, wenn irgendwer dein geforktes Programm betreibt. Einige Nodes werden der stärksten Chain folgen, die gemäss der alten Regeln gültig ist, und einige Nodes–die mit deiner Software–folgen der stärksten Chain, die gemäss der neuen Regeln gültig ist. Das Resultat kann ein Split in der Blockchain sein.

Wir gehen ein paar Beispiele durch, um zu illustrieren, was in den verschiedenen Szenarien passiert. Wir fangen mit dem einfachsten Fall an: eine Änderung, die die Konsensregeln nicht betrifft. Der Name Bitcoin ALT bezieht sich auf die bisherige Version des Programms und Bitcoin NEU auf die geänderte Version des Programms. Ein Node mit Bitcoin ALT wird ALT Node und ein Node mit Bitcoin NEU wird NEU Node genannt. Wir bezeichnen Daten–zum Beispiel einen Block–, die von einem NEU Node erzeugt wurden, als ein NEU Block. Analog dazu heisst eine Transaktion, die von einem ALT Node erzeugt wurde, eine ALT Transaktion.

11.1.1. Nicht-Konsensregel Änderungen

Angenommen du willst ein neues “Feature” zu Bitcoin Cores Netzwerkcode hinzufügen. Du willst eine Netzwerkmessage einführen namens kill, die ein Bitcoin Node einem anderen Bitcoin Node schicken kann. Der Empfängernode dieser Nachricht wird sich augenblicklich selbst herunterfahren. Nur NEU Nodes werden wissen, wie man mit einer einkommenden kill Message umgeht. ALT Nodes werden die–für sie–unbekannte Message ignorieren (Abbildung 2).

11 02
Abbildung 2. Deine neue Message wird von NEU Nodes akzeptiert und von ALT Nodes ignoriert.

Die meisten Leute betrachten deine Änderung als riesiges Sicherheitsrisiko. Sie wollen nicht, dass sich ihr Node wegen irgendeinem unbekannten Fremden im Internet abschaltet. Du wirst es schwer haben Leute zu überzeugen, Bitcoin NEU zu benutzen. Du kannst niemanden zwingen; die Leute müssen es aktiv wollen und installieren, damit Bitcoin NEU netzwerkweit angenommen wird.

Dumme Änderungen wie die kill Nachricht schaffen es nicht in der Welt von Open Source.

Mach stattdessen etwas Nützliches
BIP152

Dies wurde 2016 in Bitcoin Core implementiert und verbesserte die Blockpropagationszeit im Bitcoin Netzwerk erheblich. BIP152, “Compact Block Relay,” beschreibt es im Detail. Ich beschreibe hier nur eine vereinfachte Version.

Angenommen, du willst stattdessen etwas Nützliches machen: kompakte Blocks oder Compact Blocks. Compact Blocks lassen einen Peer einen Block zu einem anderen Peer schicken, aber ohne den vollen Block zu schicken. Stattdessen baut diese Technik auf der Tatsache auf, dass der Empfängernode die meisten der Transaktionen im Block bereits empfangen hat. Vergiss nicht, dass eine Transaktion zuerst während der Transaktionspropagation das Netzwerk durchwandert und dann nochmal während der Blockpropagation, nachdem die Transaktion bestätigt worden ist.

Wenn Rashid einen Block an Qi schickt (Abbildung 3), wäre es da nicht toll, wenn der Block nicht die Transaktionen enthalten müsste, die Qi bereits hat? Der Bandbreitenverbrauch würde dramatisch sinken.

11 03
Abbildung 3. Qi bekommt eine Transaktion zweimal: zuerst während der Transaktionspropagation und dann während der Blockpropagation.

Rashid kann stattdessen nur den Block Header und eine Liste von txids schicken (Abbildung 4). Qi kann dann den Block anhand der Transaktionen, die sie bereits im Speicher hat, und der Message von Rashid, rekonstruieren. Falls Qi eine der Transaktionen nicht hat, kann sie sie von Rashid anfordern.

11 04
Abbildung 4. Compact Blocks in Aktion. Rashid schickt nur die nötigsten Daten an Qi.

Das Protokoll beginnt damit, dass Rashid an Qi eine cmpctblock Nachricht schickt. Qi benutzt diese Nachricht, um den Block mittels der Transaktionen, die sie schon im Speicher hat, zu rekonstruieren. Ist sie erfolgreich, so ist sie fertig und kann damit beginnen, den Block zu verifizieren. Wenn ihr Transaktionen fehlen, so wird sie diese von Rashid mit einer getblocktxn Message anfordern, die eine Liste von Indizes dieser Transaktionen enthält. Rashid wird dann mit einer blocktxn Message antworten, die die fehlenden Transaktionen enthält.

Beachte, dass dies eine vereinfachte Version davon ist, wie es tatsächlich funktioniert. Die Hauptunterschiede sind folgende:

  • Die cmpctblock Message kann auch einige vollständige Transaktionen enthalten–zum Beispiel die Coinbase Transaktion des Blocks.

  • Compact Blocks funktionieren in zwei verschiedenen Modi:

    • Im hochbandbreiten-Modus werden cmpctblock Nachrichten unaufgefordert gesendet, ohne zuerst eine inv oder headers Nachricht zu schicken.

    • Im niedrigbandbreiten-Modus wird die cmpctblock Message nur nach Bedarf geschickt, nachdem eine inv oder headers Nachricht empfangen wurde.

  • Die Liste von txids in den cmpctblock Messages sind keine volle txids, sondern abgekürzte Versionen, um Datenvolumen zu sparen. Sie sind immer noch lang genug, um fast immer eindeutig die eigentliche Transaktion zu identifizieren.

Das ist eine wirklich nützliche Änderung, die viele Leute wertvoll finden. Du gibst deine Software frei und Leute fangen an, sie zu benutzen. Nicht jeder muss auf die neue Version upgraden. Wenn nur ein Peer sie benutzt, dann profitierst du davon, wenn du sie auch laufen lässt, weil die Bandbreitenanforderungen zwischen dir und dem Peer sich verringern. Während mehr und mehr Nodes anfangen, die Compact Blocks zu benutzen, sinkt deine gesamte Bandbreitenanforderung noch mehr.

Du hast keine Änderungen an den Konsensregeln gemacht. Blocks werden mit deiner Software genauso verifiziert wie zuvor. ALT Nodes akzeptieren NEU Blocks und umgekehrt.

11.1.2. Hard Forks

u11 02

Wie in Abschnitt 11.1 beschrieben ist eine Hard Fork eine Softwareänderung, die die Konsensregeln lockert. NEU Blocks, die durch NEU Nodes erzeugt wurden, könnten von ALT Nodes abgelehnt werden. Im Beispiel des vegetarischen Restaurants wäre es eine Hard Fork, wenn das Restaurant anfinge, Fleisch zu servieren.

Stell dir vor du willst eine Fork erzeugen, der das maximal erlaubte Blockgewicht–diskutiert in [increasing-the-block-size-limit]—von 4.000.000 WU auf 8.000.000 WU anhebt. Das würde es erlauben, noch mehr Transaktionen in einen Block zu stopfen. Andererseits könnte ein höheres Limit einige Nodes im Bitcoin Netzwerk beeinträchtigen, wie wir in [ch10] besprochen haben.

Jedenfalls ziehst du diese Änderung durch und beginnst, sie im Bitcoin Netzwerk zu benutzen. Wenn dein Node einen Block von einem Bitcoin ALT Node bekommt, dann akzeptierst du ihn, weil der Block definitiv ≤ 8.000.000 WU ist; der ALT Node würde ja keine Blocks erzeugen oder weiterleiten, die grösser als 4.000.000 WU sind.

Angenommen, du bist ein Miner, der Bitcoin NEU betreibt. Du hast das Glück, einen gültigen Proof of Work zu finden, und veröffentlichst deinen Block. Dieser Block wird definitiv ≤ 8.000.000 WU sein, muss aber nicht ≤ 4.000.000 WU sein. Wenn er ≤ 4.000.000 WU ist, dann wird er von den ALT Nodes akzeptiert. Aber wenn nicht, dann werden ALT Nodes deinen Block ablehnen. Deine Blockchain wird von der Bitcoin ALT Blockchain abweichen. Du hast einen Blockchain Split erzeugt (Abbildung 5).

11 05
Abbildung 5. Dein Node mit Bitcoin NEU ist ein Verlierer gegen die Bitcoin ALT Nodes. Bitcoin ALT wird all deine Blocks verwerfen, welche die ≤ 4.000.000 WU Regel verletzen.

Wenn dein NEU Node einen neuen Block erzeugt, kann dieser von den ALT Nodes abgelehnt werden, je nachdem, ob er ≤ 4.000.000 WU ist. Für die Blocks, die abgelehnt werden, wirst du eine Menge Energie und Zeit für das Mining von Blocks verschwendet haben, die es nicht in die Haupt Chain schaffen.

Aber nimm an, einer Mehrheit der Hashrate gefällt dein Bitcoin NEU Programm, und sie beginnt, es anstelle von Bitcoin ALT zu benutzen. Was passiert dann? Schauen wir mal, wie es ausgeht (Abbildung 6).

Wenn ein NEU Node einen grossen Block erzeugt, werden alle NEU Nodes versuchen, die Chain auf Basis dieses Blocks zu erweitern, aber alle ALT Nodes werden versuchen, auf Basis des letzten für sie gültigen Blocks–gemäss ALT Regeln–weiterzumachen.

11 06
Abbildung 6. Eine Mehrheit der Hashrate betreibt Bitcoin NEU. Es scheint einen dauerhaften Chain Split verursacht zu haben.

NEU Nodes gewinnen im Laufe der Zeit mehr Blocks als ALT Nodes, weil sie zusammengenommen mehr Hashrate haben als die ALT Nodes. Es scheint, als würde der NEU Zweig intakt bleiben, weil er eine beruhigende Führung im gesammelten Proof of Work aufbaut.

NEU Nodes haben anscheinend einen dauerhaften Chain Split erzeugt. Aber wenn ein paar Miner sich entschliessen, zu Bitcoin ALT zurückzugehen, oder wenn zusätzliche Miner dem Rennen mit ALT Nodes beitreten, sodass ALT die Mehrheit der Hashrate wiederbekommt, dann könnte die NEU Chain Probleme bekommen, wie Abbildung 7 zeigt.

11 07
Abbildung 7. Die Bitcoin NEU Chain wird ausgelöscht, weil die Bitcoin ALT Chain stärker wird.

Wenn ALT Nodes die Mehrheit der Hashrate haben, werden sie schneller als die NEU Nodes sein und irgendwann aufholen und die NEU Nodes überholen. NEU Nodes erkennen diese Tatsache an und schwenken zurück zum Minen auf der ALT Chain. Wir sagen, dass der Zweig, den die NEU Nodes gebaut haben, durch eine Chain Reorganisation–üblicherweise als Reorg bezeichnet–ausgelöscht wurde, ein Wipeout.

Wipeout Schutz

Blocks, die von den ALT Nodes in der gerade beschriebene Hard Fork erzeugt wurden, sind immer mit den NEU Nodes kompatibel. Das bedeutet, es gibt ein höheres Risiko für einen Reorg auf der NEU Chain.

Das ist nicht bei allen Hard Forks der Fall. Nimm zum Beispiel an, dass du die Proof of Work Hashfunktion von Doppel-SHA256 auf einfaches SHA256 umstellen willst. Deine NEU Blocks werden immer von den ALT Nodes abgelehnt; und umgekehrt werden ALT Blocks auch immer von NEU Nodes abgelehnt. Eine solche Änderung verhindert daher garantiert einen Reorg durch den ALT Zweig. Sie besitzt einen natürlichen Wipeout-Schutz–aber viele Änderungen haben den nicht.

Ein Beispiel für eine Änderung ohne eingebauten Wipeout-Schutz ist eine alternative Kryptowährung namens Bitcoin Cash. Sie wurde durch einen Hard Fork Versuch von Bitcoin Core auf Block Height 478559 am 1. August 2017 erzeugt. 2017. Die Hauptänderung von Bitcoin Cash war eine Vergrösserung der Blockgrösse und die Entfernung von SegWit aus dem Code. Das machte die ALT Chain inkompatibel mit den NEU Nodes und anfällig für Wipeout. Um sich dagegen zu schützen, dass Bitcoin NEU durch einen Wipeout in einem Reorg ausgelöscht würde, hat Bitcoin Cash eine Wipeout Protection hinzugefügt, indem verlangt wurde, dass der erste Block nach dem Split grösser als 1.000.000 Bytes (1 MB) sein musste. Siehe Abbildung 8.

11 08
Abbildung 8. Bitcoin Cash schützt sich gegen Wipeout, indem es verlangt, dass der erste Block nach dem Chain Split >1 MB ist.

Das Resultat ist, dass Bitcoin NEU Nodes nicht zurück zum Bitcoin ALT Zweig können, weil dieser Zweig einen Block kleiner oder gleich 1 MB auf Height 478559 hat.

11.1.3. Soft Forks

u11 03

Wir haben Soft Fork in diesem Buch mehrfach diskutiert. Eine Soft Fork ist eine Änderung an den Konsensregeln, bei der NEU Blocks von den ALT Nodes akzeptiert werden. Die Konsensregeln werden gestrafft. Im Falle des vegetarischen Restaurants wäre es eine Soft Fork, wenn das Restaurant sein Essen auf Vegan umstellte.

SegWit ist ein Beispiel für eine Soft Fork. Die Änderung wurde sorgfältig geplant, sodass ALT Nodes beim Verifizieren von Blocks, die SegWit Transaktionen enthalten, nie scheitern. Alle ALT Nodes akzeptieren jeden gültigen NEU Block und bauen ihn in die Blockchain ein.

Auf der anderen Seite könnte ein ALT Node einen Block generieren, der gemäss Bitcoin NEU ungültig ist. Zum Beispiel könnte ein nicht-SegWit Miner in seinen Block eine Transaktion einbauen, die einen SegWit Output ausgibt, als wäre es ein anyone-can-spend Output (Abbildung 9).

11 09
Abbildung 9. Ein ALT Miner betrachtet einen SegWit Output als anyone-can-spend und fügt dem Block eine Transaktion hinzu, die den Output als solchen ausgibt.

Angenommen, es gibt nur einen einzigen Miner mit einer geringen Hashrate, der Bitcoin NEU betreibt. Nimm weiterhin an, dass die ALT Miner einen Block produzieren, der gemäss der NEU Regeln ungültig wäre, wie in dem früheren Beispiel mit der nicht-SegWit Transaktion. Das Ergebnis wäre, dass die ALT Nodes einen Block bauen, der von dem NEU Miner nicht akzeptiert würde. Der NEU Miner würde den für ihn ungültigen ALT Block ablehnen. Dies ist der Punkt, an dem die Blockchain sich in zwei Chains aufspaltet (Abbildung 10).

11 10
Abbildung 10. Die Soft Fork könnte einen Chain Split verursachen, wenn die Bitcoin ALT Nodes einen Block produzieren, den Bitcoin NEU Miner nicht akzeptieren.

In dieser Situation riskiert die ALT Chain, per Wipeout durch einen Reorg ausgelöscht zu werden. Nimm an, mehr Miner entschliessen sich, zu Bitcoin NEU zu upgraden, wodurch eine Mehrheit der Hashrate Bitcoin NEU unterstützt. Nach einer Weile würden wir wahrscheinlich einen Reorg sehen (Abbildung 11).

11 11
Abbildung 11. Wenn mehr Leute Bitcoin NEU übernehmen, wird der Zweig einen Reorg für die ALT Nodes auslösen.

Der Bitcoin NEU Zweig wird der stärkere Zweig, sodass die verbleibenden ALT Miner deren Zweig verlassen und anfangen werden, an demselben Zweig wie die NEU Nodes zu arbeiten. Aber sobald ein ALT Node einen Block produziert, der auf den NEU Nodes ungültig ist, verliert er seinen Block Reward, weil der Block nicht auf dem NEU Zweig akzeptiert wird.

11.1.4. Unterschiede zwischen Hard und Soft Forks.

Schauen wir noch einmal, was Soft Forks von Hard Forks unterscheidet, als allgemeine Regel:

  • Eine Hard Fork lockert die Regeln. Vergrössern des maximalen Blockgewichts ist ein Hard Fork. Ein vorab invalider Block wird valide.

  • Ein Soft Fork strafft die Regeln. SegWit ist ein Soft Fork. Ein vorab valider Block wird invalide.

Das ist eine einfache, aber wahre, Unterscheidung. Wir können die Effekte eines Chain Splits durch Soft Fork oder Hard Fork wie folgt zusammenfassen:

  • Hard Fork–Der NEU Zweig könnte in einem Reorg ausgelöscht werden. Verwende Wipeout Schutz, um dies zu verhindern. Der ALT Zweig kann nicht ausgelöscht werden.

  • Soft Fork–Der NEU Zweig könnte in einem reorg ausgelöscht werden. Du kanst den ALT Zweig nicht vor einem Wipeout schützen, denn das würde aus diesem Fork einen Hard Fork machen. Denke daran, dass die Definition eines Soft Fork ist, dass ALT Nodes NEU Blocks akzeptieren.

11.2. Transaction Replay

Egal wodurch der Chain Split verursacht wurde, es betrifft dieselben Benutzer. Benutzer haben am Schluss zwei Versionen ihrer UTXO: eine, die auf der ALT Chain und eine, die auf der NEU Chain verwendbar ist. Wir haben effektiv zwei kryptowährungen, Bitcoin ALT und Bitcoin NEU (Abbildung 12).

11 12
Abbildung 12. Nach einem Chain Split hast du effektiv zwei Versionen deinen UTXOs.
Wertschwankungen

Wenn ein Chain Split passiert, könnte es erheblichen Einfluss auf den Wert der bitcoins auf dem ALT Zweig haben. Der Wert pro Coin auf dem NEU Zweig könnte oder könnte nicht bekannt sein; das hängt davon ab, ob diese Coins bereits verbreitet gehandelt werden.

Angenommen, der Chain Split aus Abbildung 12 ist passiert und du willst ein Buch in einem Online Buchladen bezahlen. Du willst das mittels Bitcoin ALT tun, denn das ist die Währung, die der Buchhändler verlangt.

Du erzeugst deine Transaktion und sendest sie. Die ALT Nodes im Netzwerk werden deine Transaktion akzeptieren, weil du eine UTXO ausgibst, die auf diesen Nodes existiert. Aber deine Transaktion ist auch gültig auf NEU Nodes, weil diese Nodes ebenfalls denselben UTXO Set habenl (Abbildung 13).

11 13
Abbildung 13. Deine Transaktion mit dem Buchladen ist sowohl auf der Bitcoin ALT als auch auf dem Bitcoin NEU Zweig gültig.

Wenn deine Transaktion sowohl zu einem ALT als auch zu einem NEU Miner propagier wird, dann wird sie wahrscheinlich in beiden Zweigen der Blockchain landen. Das ist nicht das, was du vorhattest. Deine Transaktion ist auf dem neuen Zweig wiederholt oder replayed, worden (Abbildung 14).

11 14
Abbildung 14. Transaktion Replay sorgt dafür, dass du in beiden Währungen zahlst.

11.2.1. Replay Protection

Um Benutzer während eines Chain Splits vor Replay wegen einer Hard Forks zu schützen, kann das Transaktionsformat auf der NEU Chain so geändert werden, dass die Transaktion höchstens auf einem der Zweige gültig ist.

Als Bitcoin Cash seinen Chain Split durchgeführt hat, wurde sichergestellt, dass ALT Transaktionen nicht auf NEU Nodes gültig waren und NEU Transaktionen nicht auf ALT Nodes (Abbildung 15).

11 15
Abbildung 15. Mit Replay Protection ist eine Transaktion nur auf einem der beiden Zweige gültig.

Um das zu erreichen, muss eine Transaktion auf dem NEU Zweig einen neuen SIGHASH Typ, FORKID, in den Transaktionssignaturen verwenden. Dieser Typ tut zwar aktiv überhaupt nichts, macht aber die Transaktion im ALT Zweig ungültig und im NEU Zweig gültig. Wenn eine Transaktion FORKID nicht benutzt, ist sie auf dem ALT Zweig gültig und auf dem NEU Zweig ungültig.

Einen neuen SIGHASH Typ für Signaturen zu benutzen ist natürlich nicht die einzige Methode, Replay Protection zu erreichen. Jede Änderung, die Transaktionen auf dem einen Zweig gültig und auf dem anderen ungültig macht, ist erlaubt. Man könnte zum Beispiel auch verlangen, dass NEU Transaktionen jeweils 1 von der txid der Inputs abziehen. Angenommen die UTXO, die du ausgeben willst, hat diese txid:

6bde18fff1a6d465de1e88b3e84edfe8db7daa1b1f7b8443965f389d8decac08

Wenn du die UTXO auf dem ALT Zweig ausgeben willst, benutzt du diesen Hash im Input deiner Transaktion. Wenn du die UTXO auf dem NEU Zweig ausgeben willst, benutzt du stattdessen das hier:

6bde18fff1a6d465de1e88b3e84edfe8db7daa1b1f7b8443965f389d8decac07

Beachte, dass dies nur ein albernes Beispiel ist, kein vollwertiger Vorschlag.

11.3. Upgrade Mechanismen

Alle nicht dringenden Upgrades von Bitcoin wurden bisher mittels Soft Fork erledigt. Eine Soft Fork sicher durchzuziehen ist ein schwieriges Problem, und die Mechanismen dafür haben sich im Laufe der Zeit entwickelt.

Die Hauptsorge, wenn man eine Soft Fork macht, ist, dass die Blockchain sich aufspaltet und über eine erhebliche Zeitspanne so bleibt. Wenn dies passiert, haben wir effektiv zwei Kryptowährungen.

Das würde zu Konfusion führen: Exchanges müssten entscheiden, welchen Zweig sie als “Bitcoin” betrachten und welche Zweige sie mit ihren Exchange Diensten unterstützen. Benutzer müssten informiert werden, dass ein Split passiert ist, damit sie vermeiden können, Geld an den falschen Zweig zu schicken. Händler müssten sicherstellen, dass sie Rechnungen in der beabsichtigten Währung ausstellen. Ein Blockchain Split könnte auch den Wert der Kryptowährung drastisch fallen lassen.

11.3.1. Coinbase Signalisierung—BIP16

Als p2sh 2012 eingeführt wurde, hatte die Bitcoin Gemeinde keine Erfahrung mit Upgrades. Sie musste sich etwas einfallen lassen, um einen Blockchain Split zu vermeiden. Die Gemeinde implementierte Soft Fork Signalisierung, oder Signaling, mittels der Coinbase. NEU Miner signalisierten Unterstützung für p2sh, indem sie den String /P2SH/ in die Coinbase der von ihnen produzierten Blocks schrieben (Abbildung 16).

11 16
Abbildung 16. Ein Miner signalisiert Unterstützung für p2sh, indem er /P2SH/ in das Signatur Script der Coinbase Transaktion einträgt.
Benutzer-aktivierte Soft Fork

Eine Deployment Methode, bei der die Benutzer, nicht nur die Miner, mit der Durchsetzung der Regeln beginnen, ist als User Activated Soft Fork bekannt geworden. Wir besprechen dies später in diesem Kapitel

An einem bestimmten Tag schauten die Bitcoin Entwickler nach, ob mindestens 550 der letzten 1.000 Blocks /P2SH/ enthielten. Das war der Fall, und so stellten die Entwickler am 1. April 2012 eine neue Software Release zur Verfügung, die die p2sh Regeln verlangt. Dieser Tag wurde als “Flag Day” bezeichnet, als Signaltag.

Das funktionierte gut; Miner übernahmen schnell die Soft Fork und das gesamte Netzwerk installierte innerhalb einer vernünftigen Zeit das Upgrade. Es geschah kein Split, weil mindestens 50% der Hashrate vor dem Signaltag den Upgrade installiert hatte.

11.3.2. Signalisierung durch erhöhte Block Versionsnummern–BIP34, 66 und 65

Ich habe nicht viel darüber gesprochen, aber der Block Header hat eine eigene Versionsnummer (Abbildung 17). Diese Version wird in den ersten 4 Byte vor dem eigentlichen Block Hash codiert.

11 17
Abbildung 17. Der Block Header enthält eine Blockversion. Die ersten Blocks benutzten Version 1.

Die Version ist das einzige, was bei unseren früheren Block Headern fehlt. Dies ist der eigentliche 80 Byte Bitcoin Block Header.

4 Bytes  Version
32 Bytes Vorgänger Block ID
32 Bytes Merkle Root
4 Bytes  Timestamp
4 Bytes  Target
4 Bytes  Nonce

Gesamt 80 Bytes

Die Blockversion kann verwendet werden, um Unterstützung für gewisse neue Features zu signalisieren.

BIP34

Dieser BIP, “Block v2, Height in coinbase,” beschreibt sowohl, wie die Block Height in der Coinbase gespeichert wird, als auch, wie die Änderung mittels Versionsnummern ausgerollt werden soll.

Das erste Soft Fork Deployment mittels Blockversions-Signalisierung geschah 2013. Diese Soft Fork fügte eine Regeln hinzu, dass alle neuen Blocks die Block Height in ihrer Coinbase Transaktion enthalten müssen (Abbildung 18).

11 18
Abbildung 18. BIP34 verlangt, dass alle Blocks die Block Height in der Coinbase enthalten.

Die Aktivierung der Soft Forks geschah schrittweise durch Signalisierung mittels Blockversionsnummern, um einen Split der Blockchain zu verhindern:

  1. NEU Miner erhöhen die Blockversion von 1 auf 2 (Abbildung 19). Beachte, dass dies graduell passiert, weil im Laufe der Zeit zunehmend mehr Nodes auf Bitcoin NEU umschwenken.

    11 19
    Abbildung 19. Minder, die die Soft Fork betreiben, signalisieren Unterstützung für diese, indem sie die Blockversion erhöhen.
  2. Warte, bis mindestens 750 der letzten 1.000 Blocks eine Versionsnummer von mindestens 2 haben. Wenn diese Schwelle erreicht ist, haben die NEU Miner wahrscheinlich ungefähr 75% der Hashrate.

  3. Beginne neuproduzierte Version 2 Blocks abzulehnen, die nicht die Height in der Coinbase tragen. Diese Blocks signalisieren falsch bezüglich BIP34.

  4. Warte, bis 950 der letzten 1.000 Blocks eine Version ≥2 haben. Wenn das passiert, haben die NEU Miner ungefähr 95% der Hashrate.

  5. Beginne, alle neuen Blocks mit Version 1 abzulehnen. Alle Miner, die Version 1 Blocks produzieren, werden verlieren, weil 95% der Hashrate diese Blocks ablehnt. Die Hoffnung ist, dass Miner, die immer noch nicht den Upgrade durchgeführt haben, das nun schnell nachholen, um nicht noch mehr Geld durch das Minen wertloser Blocks zu verlieren.

u11 04

Im Laufe von Schritt 1 hat sich nichts geändert. Es gelten nur die Bitcoin ALT Regeln. Aber wenn 750 der letzten 1.000 Blocks Version 2 haben, betreten wir die nächste Stufe. Hier sorgen die Nodes, auf denen die Soft Fork Software läuft, dafür, dass alle Version 2 Blocks die Block Height in der Coinbase haben. Ansonsten wird der Block fallengelassen. Ein Grund dafür ist, dass Nodes vielleicht absichtlich oder versehentlich aus anderen Gründen als für diese Fork Blockversion 2 signalisieren. Die 75% Regel entfernt solche Fehltreffer, bevor sie die 95% Regel auswertet.

Ab diesem Punkt könnten einige ALT Miner eine Chain Split erzeugen, indem sie einen Block mit Version 2 erzeugen, der die “Height in Coinbase” Regel verletzt (Abbildung 20).

11 20
Abbildung 20. Die ALT Nodes könnten für einen Chain Split sorgen, der aber wohl nicht lange anhalten würde.

Die ALT Miner würden auf Basis dieses Blocks weiterbauen, während die NEU Miner auf dem vorigen Block aufbauen würden. Aber die NEU Miner haben wahrscheinlich–abhängig von der Menge an falscher Signalisierung für Version 2–mehr Hashrate und werden die ALT Miner abhängen und den Bitcoin ALT Zweig auslöschen.

u11 05

Wenn ein grösserer Anteil der Blocks–95% der letzten 1.000–mit Version 2 Blocks Unterstützung signalisiert, gehen wird den letzten Schritt, Schritt 5. Von diesem Punkt an werden alle Blocks mit Version < 2 fallengelassen.

Warum sind wir durch diese Phasen gegangen? Es ist nicht völlig klar, weshalb die 75% Regel benutzt wurde, aber es entfernt False Positives, also Fehltreffer, wie beschrieben. Das Deployment hätte auch nur mit der 95% Regel funktionieren können. Wir werden den Gedankengang hinter der 75% Regel nicht ergründen–akzeptieren wir, dass es für dieses und ein paar andere Deployments benutzt wurde. Tabelle 2 listet Soft Forks auf, die mit diesem Mechanismus eingeführt wurden.

Tabelle 2. Per hochgezählter Blockversion ausgerollte Features
BIP Name Datum Block Version

BIP34

Block v2, Height in Coinbase

März 2013

2

BIP66

Striktes DER Encoding

Juli 2015

3

BIP65

OP_CHECKLOCKTIMEVERIFY

Dezember 2015

4

Dieser Upgrademechanismus heisst Miner-aktivierte Soft Fork. Die Miner beginnen mit der Durchsetzung der neuen Regeln, und alle oder die meisten Full Nodes werden dem folgen, weil die NEU Blocks von sowohl NEU als auch ALT Nodes akzeptiert werden.

11.3.3. Block-Versionsbits-Signalisierung–BIP9

BIP9

Dieser BIP spezifiziert einen Standard dafür, wie das Versions Feld im Block Header verwendet wird, um mehrere gleichzeitige Deployments vorzunehmen.

Die Bitcoin Entwickler haben in früheren Soft Forks eine Menge Erfahrung gesammelt. Ein paar Probleme müssen adressiert werden:

  • Man kann nur eine Soft Fork auf einmal ausrollen.

  • Benutzte Blockversionen können nicht für andere Zwecke erneut verwendet werden.

Das lästigste Problem ist, dass man nicht mehrere Soft Forks auf einmal ausrollen kann. Das liegt daran, dass frühere Deployment Mechanismen, wie das für BIP34 verwendete, geprüft haben, ob eine Blockversion grösser oder gleich einer bestimmten Zahl war, zum Beispiel 2.

Angenommen, du möchtest sowohl BIP34 als auch BIP66 gleichzeitig ausrollen. BIP34 würde Blockversion 2 benutzen und BIP66 Blockversion 3. Das würde bedeuten, dass man nicht selektiv Unterstützung nur für BIP66 signalisieren könnte; man müsste auch Unterstützung für BIP34 signalisieren, weil die Blockversion 3 grösser oder gleich 2 ist.

Die Entwickler liessen sich ein Bitcoin Improvement Proposal, BIP9, einfallen, das einen Prozess beschreibt, wie man mehrere Soft Forks gleichzeitig ausrollen kann.

Der Prozess benutzt ebenfalls die Blockversion, aber auf eine andere Weise. Die Entwickler entschieden, die Interpretation der Blockversions-Bytes zu verändern. Blockversionen, die die obersten 3 Bit genau auf 001 gesetzt haben, werden anders behandelt.

Zunächst sind alle solchen Blockversionen grösser als 4, weil die kleinste solche Blockversion 20000000 ist, also erheblich grösser als 00000004. Also werden Blocks, die BIP9 benutzen, immer die bereits ausgerollten BIP34, 66 und 65 unterstützen. Gut.

Als nächstes können die 29 Bits rechts von den ganz links stehenden 001 Bits benutzt werden, um Unterstützung für höchstens 29 gleichzeitige Soft Forks zu signalisieren. Jedes der 29 rechten Bits kann verwendet werden, um unabhängig ein einzelnes Feature oder eine Gruppe von Features auszurollen (Abbildung 21). Wenn ein Bit auf 1 steht, dann unterstützt der Miner, der den Block produziert hat, das Feature, das von diesem Bit repräsentiert wird.

11 21
Abbildung 21. Die Blockversion wird anders behandelt. Jedes der 29 Bits kann Support für verschiedene Vorschläge signalisieren.

Mehrere Parameter müssen für jedes ausrollbare Feature definiert werden:

  • Name—Ein kurzer aber beschreibender Name für das Feature

  • Bit—Die Nummer der Bits, die für das Signalisieren benutzt wird

  • Startzeit—Wann die Überwachung der Miner Unterstützung beginnen soll

  • Timeout—Die Zeit, zu der das Deployment als gescheitert betrachtet werden soll

Das Deployment durchläuft eine Anzahl Zustände (siehe Abbildung 22). Der Status wird nach jeder Retarget Period aktualisiert.

  • DEFINED—Der Anfangszustand. Das bedeutet, seit der Startzeit ist noch kein Retarget geschehen.

  • STARTED—Warte, bis mindestens 1.916 (95%) Blocks in der letzten Retarget Periode Unterstützung signalisieren.

  • LOCKED_IN—Eine Karenzzeit, um den verbleibenden nicht signalisierenden Minern eine Chance zum Upgrade zu geben. Tun sie das nicht, werden ihre Blocks abgelehnt.

Zeitvergleich

Wenn Blockzeiten mit den Start und Endzeiten verglichen werden benutzen wir immer die Median Time Past, wie in [timestamp-rules] beschrieben.

  • ACTIVE—Die neuen Regeln sind aktiv.

  • FAILED—Der Timeout ist abgelaufen, bevor der Ausrollvorgang den Zustand LOCKED_IN erreicht hatte. Bei gleichzeitigem Eintreten mehrerer Bedingungen hat der Timeout Vorrang vor anderen Bedingungen wie der 95% Regel.

11 22
Abbildung 22. Zustandsübergänge geschehen alle 2.016 Blocks.

Wenn der Ausrollvorgang ACTIVE oder FAILED ist, wird das Bit, das Support signalisiert, auf 0 zurückgesetzt werden, damit es für spätere Ausrollvorgänge wiederverwendet werden kann.

11.3.4. Benutzen von BIP9 zum Ausrollen relativer Lock Time

BIPs 68, 112 und 113

Dieses “Feature” ist eigentlich eine Gruppe von BIPs, die zusammen die relative Lock Time ans Laufen bringen.

Schauen wir uns ein Beispiel dafür an, wie ein Deployment mittels Versionsbits ablaufen kann. Wir betrachten, wie relative Lock Time ausgerollt wurde. Die Entwickler dieses neuen Features hatten die folgenden BIP9 Parameter definiert:

Name:       csv
Bit:        0
Startzeit: 2016-05-01 00:00:00
Timeout:    2017-05-01 00:00:00

Der Timeout lag ein Jahr hinter der Startzeit, was den Minern etwa ein Jahr Zeit gab, auf die Soft Fork umzustellen, die das Feature implementiert.

Abbildung 23 zeigt die Zustandsübergänge, die geschahen.

11 23
Abbildung 23. BIP9 Deployment von csv. Es lief glatt.

Dieses Deployment lief schnell und glatt durch. Es brauchte nur drei Retarget Perioden, bis 95% der Miner auf die neue Software umgestellt hatten.

Unglücklicherweise gingen nicht alle Deployments so glatt.

11.3.5. Benutzung von BIP9 zum Deployment von SegWit

u11 06

SegWit, beschrieben in [ch10], verwendete auch BIP9 für sein Deployment, aber die Dinge liefen nicht wie vorgesehen. Es begann zunächst genau wie mit dem csv Deployment. Die Parameter für dieses Deployment waren:

Name:       segwit
Bit:        1
Startzeit: 2016-11-15 00:00:00
Timeout:    2017-11-15 00:00:00

Eine neue Version von Bitcoin Core wurde mit diesen SegWit Deployment Parametern freigegeben. Benutzer übernahmen diese Version ziemlich zügig, aber aus irgendwelchen Gründen blieben die Miner zögerlich. Das Signaling flachte bei ungefähr 30% ab und der Deployment Prozess blieb im STARTED Zustand stecken, wie Abbildung 24 zeigt.

11 24
Abbildung 24. Das SegWit Deployment lief nicht wie erwartet.

Dem SegWit Deployment drohte ein Scheitern–der Übergang in den FAILED Zustand nach dem Timeout. In diesem Fall müsste ein ganzer neuer Deployment Zyklus eingerichtet und ausgeführt werden, was ein weiteres Jahr dauern könnte.

Interessenskonflikte
u11 07

Gleichzeitig wurde ein anderer Vorschlag diskutiert. Dieser Vorschlag wurde als SegWit2x bezeichnet. Es war ein Vorschlag, erst SegWit zu aktivieren und dann das maximale Blockgewicht mittels einer Hard Fork zu erhöhen, zusätzlich zur Erhöhung der maximalen Blockgrösse, die SegWit selbst bot. Dieser Vorschlag würde BIP9 mit Versionsbit 4 zur Signalisierung von Unterstützung benutzen. Bitcoin Core zeigte kein Interesse an diesem Vorschlag, aber das Bitcoin Core Software Repository wurde unter dem Namen btc1 von einer Gruppe von Leuten kopiert, die es zur Umsetzung ihres Vorschlags benutzten. Der Schwellwert zum einrasten von SegWit sollte 80% der letzten 2.016 Blocks betragen. Dieser Vorschlag bekam eine Menge Zustimung von den Minern.

Es schien eine Diskrepanz zwischen dem zu geben, was Full Nodes wollten und dem, was Miner wollten. Gerüchte und Theorien über die Gründe für diese Diskrepanz schwirrten herum. Wir werden auf diese nicht eingehen, sondern bei dem bleiben, was wir wissen.

Eine benutzeraktivierte Soft Fork
u11 08

Mitten in all dem kam plötzlich ein neuer Vorschlag auf, BIP148, der anfangen würde, Blocks fallenzulassen, wenn diese nicht ab 1. August 2017 Bit 1 (SegWit) signalisieren würden. Der Effekt wäre, dass Nodes mit BIP148 eine 100% Adoption von BIP141 erleben würden, was BIP141 nach höchstens zwei Retarget Perioden einrasten lassen würde. Dieses Verfahren wurde unter dem Namen User Activated Soft Fork bekannt. User–die Betreiber von Full Nodes–entscheiden kollektiv, dass sie neue Regeln anwenden werden, und wenn die Miner sich nicht daran halten, werden ihre Blocks verworfen. Wir sprechen gegen Ende dieses Kapitels noch ein bisschen über User Activated Soft Forks.

BIP148 war ein Versuch, SegWit Deployment trotz zögernder Miner durchzusetzen.

Einige Gruppen, besonders das Bitcoin Core Team, hielten diesen Vorschlag für zu riskant. Es führt zu einem Chain Split, wenn ein Miner einen nicht SegWit signalisierenden Block verbreitet. Aber es gab auch eine Gruppe von Leuten, die mit BIP148 auf jeden Fall weitermachen wollten. Dies verursachte einige Sorge in der Bitcoin Gemeinde.

Ein Vorschlag, die Gruppen zusammenzubringen
u11 09

Wir hatten ein festgefahrenes SegWit Deployment, eine alternative SegWit2x Fork auf dem Weg, den viele Miner zu wollen schienen und eine Gruppe ungeduldiger Benutzer, die SegWit mit BIP148 durchsetzen wollten.

Um einen Timeout des SegWit Deployment–der SegWit weiter verzögern würde–zu vermeiden und einen möglichen Chain Split durch BIP148 zu verhindern und die SegWit2x Menge zu besänftigen, wurde ein neuer BIP geschrieben. BIP91 würde all diese Gruppen zufriedenstellen. Es würde BIP9 mit einem benutzerdefinierten Schwellwert verwenden:

Name:       segsignal
Bit:        4
Startzeit: 2017-06-01 00:00:00
Timeout:    2017-11-15 00:00:00
Periode:     336 blocks
Schwellwert:  269 blocks (80%)
Hört auf, aktiv zu sein, wenn SegWit (Bit 1) LOCKED_IN oder FAILED ist.

Dieser BIP tat Dinge anders als normale BIP9 Deployments. Es verwendete eine kürzere Periode–336 Blocks statt 2.016 Blocks–und einen niedrigeren Schwellwert–80% statt 95%.

In seiner aktiven Phase benahm sich dieser BIP wie BIP148. Alle Blocks, die nicht Bit 1 (SegWit) signalisieren, wurden zurückgewiesen. Beachte, dass dies kompatibel mit BIP148 und SegWit2x war. Es signalisierte mittels Bit 4, dem selben Bit, das SegWit2x benutzen würde, und es erzwang das Einrasten von SegWit durch Abweisen von nicht-Bit-1-signalisierenden Blocks.

Der BIP wurde nicht in Bitcoin Core implementiert, sondern in einer kopierten Version davon. Diese Version erreichte schnell grosse Verbreitung unter den Minern, und am 21. Juli 2017 ging der BIP in den Zustand LOCKED_IN über. Siehe Abbildung 25.

11 25
Abbildung 25. P91 aktualisiert seinen Zustand alle 336 Blocks statt der üblichen 2.016. Das ging schnell.

Es aktivierte drei Tage nach dem LOCKED_IN. Beachte, dass hauptsächlich Miner BIP91 übernommen hatten. Normale Benutzer verwendeten typischerweise Bitcoin Core, was BIP91 nicht implementiert hatte.

Als die Miner BIP91 aktivierten, begannen sie damit, Blocks zu verwerfen, die nicht Bit 1 signalisierten, was das Bit für das SegWit Deployment war. Als Resultat schafften es die nicht-Bit-1-Blocks nicht in die stärkste Chain, was die verbleibenden Miner dazu zwang, auf SegWit umzustellen, um zu vermeiden, dass sie ungültige Blocks minen.

Miner begannen damit, SegWit zu signalisieren, den originalen SegWit Vorschlag, der Bit 1 zum Deployment benutzte, und der ging am 9. August 2017 in LOCKED_IN über und wurde am 24. August 2017 ACTIVE, wie Abbildung 26 zeigt.

11 26
Abbildung 26. SegWit aktiviert sich dank BIP91 endlich.

Normale nicht-minende Benutzer, Händler und Exchanges mussten nichts besonderes tun, um auf der stärksten Chain zu bleiben, weil deren Software (normale SegWit-fähige Software) der stärksten gültigen Chain folgt. Das bedeutete, dass BIP141 in den Zustand LOCKED_IN einrastete und dann für alle Benutzer und Miner gleichzeitig ACTIVE wurde.

Lessons Learned

Die Ereignisse während des SegWit Deployments waren unvorhergesehen. Wenige dachten, dass Miner sich weigern würden, BIP141 zu übernehmen. Und doch geschah genau dies.

Es wurde klar, dass BIP9 kein ideales Verfahren zum Deployment einer Soft Fork ist. Es räumt 5% der Hashrate ein Vetorecht ein. Angesichts dessen, dass mehrere Miner jeweils mehr als 5% der gesamten Hashrate kontrollieren, konnte jeder dieser individuellen Teilnehmer ein Systemupgrade blockieren.

Wie in [trust-in-lisa] behandelt, bezahlen wir MIner für die korrekte, ehrliche Bestätigung von Transaktionen. Wir bezahlen sie nicht dafür, über die Regeln zu entscheiden, wir bezahlen sie dafür, den Regeln zu folgen. Über die Regeln wird kollektiv von allen, dir und mir, durch die Benutzung der entsprechenden Bitcoin Software entschieden.

Denk darüber nach.

11.3.6. User Activated Soft Forks

Um die Wichtigkeit der wirtschaftlichen Mehrheit (du, ich und alle anderen Bitcoin Benutzer) zu unterstreichen und um zu vermeiden, dass Miner gegen Vorschläge, die von der wirtschaftlichen Mehrheit verlangt werden, Veto einlegen dachten die Leute eingehender über User Activated Soft Forks nach.

Schauen wir uns ein fiktives Beispiel für eine User Activated Soft Fork an.

Angenommen, 99% der Bitcoin Benutzer (Endbenutzer, Exchanges, Händler und so weiter) wünschen eine Regeländerung–zum Beispiel kleinere Blocks–, dann wäre dies eine Soft Fork. Nimm weiter an, dass kein Miner kleinere Blocks will, also weigern sie sich alle, mitzumachen. Und nimm ausserdem an, dass 99% der nicht-minenden Full Nodes ihre Software so ändern, dass diese ab einer bestimmten Block Height grosse Blöcke ablehnt.

Was wird passieren, wenn ein Block diese Height passiert? Miner, die grosse Blocks produzieren, bauen dann eine Blockchain, die Benutzer als ungültig erachten (Abbildung 27).

11 27
Abbildung 27. Benutzer beginnen, grosse Blocks zurückzuweisen. Sie sehen keine gültigen Blocks, aber jede Menge ungültige (zu grosse) Blocks.

Der Wert der Block Rewards in der “Miner” Chain wäre unbekannt, weil die Exchanges nicht mit der Miner Chain handeln. Miner werden nicht in der Lage sein, ihre Block Rewards zu verkaufen, um ihre Stromrechnungen zu bezahlen. Selbst wenn der Stromlieferant Bitcoin akzeptiert, können die Miner dennoch nicht mit ihren Block Rewards bezahlen, weil der Stromlieferant die Blocks der Miner nicht als gültig anerkennt. Denke daran, dass der Stromlieferant auch ein Bitcoin Benutzer ist.

Aber wenn ein einziger Miner sich entschliesst, auf die Forderungen der Benutzer einzugehen, dann werden seine Blocks die einzigen sein, die die Benutzer schlussendlich akzeptieren (Abbildung 28).

11 28
Abbildung 28. Ein Miner entschliesst sich, dem Willen der User zu folgen und nur kleine Blocks zu bauen. Dieser Miner wird seine Rechnungen bezahlen können.

Dieser einzelne Miner wird für den Block, den er erzeugt, belohnt, weil die wirtschaftliche Mehrheit seinen Block akzeptiert. Die Blocks auf der Miner (grosse Blocks) Chain sind immer noch ziemlich wertlos, weil kein User sie akzeptiert. Darüberhinaus kann der einzelne klein-Block Miner mehr Gebühren verlangen, weil die Gesamtmenge an Blockplatz geringer ist–sowohl weil das maximale Blockgewicht kleiner ist, als auch weil die gesamte Anzahl Blocks geringer ausfällt.

Einige weitere gross-Block Miner werden vermutlich merken, dass ihnen schnell das Geld ausgeht, und beschliessen, zu dem User-akzeptierten Zweig hinüber zu schwenken (Abbildung 29).

11 29
Abbildung 29. Ein paar weitere Miner merken, dass es profitabler ist, auf dem User-Zweig weiterzuarbeiten.

Wenn mehr Miner zum User-Zweig wechseln, wird dieser Zweig irgendwann stärker als die gross-Block Chain. Wenn das passiert, wird die gross-Block Chain ausgelöscht (Abbildung 30) und die verbleibenden Miner werden automatisch auf den klein-Block Zweig umschalten, weil die Änderung eine Soft Fork ist

11 30
Abbildung 30. Der Zweig der User ist stärker und löscht den gross-Block Zweig aus.

Die Benutzer gewinnen.

Eine der ersten Soft Forks in Bitcoin, das Deployment von BIP16 (p2sh), war eine User Activated Soft Fork. Das Deployment war insofern manuell, als die Entwickler an einem bestimmten Tag manuell die Anzahl Blocks zählen mussten, welche Unterstützung signalisierten und sich dann auf einen Signaltag, einen Flag Day einigen mussten, um ihn in das nächste Release der Bitcoin Software einzubauen. Nach diesem Datum wurden alle Blocks, die sich nicht an die neuen Regeln hielten, von den Nodes mit dieser Software abgelehnt.

Um die Einsichten aus dem kürzlichen Deployment von SegWit zu benutzen, ist ein neuer Deployment Mechanismus in Arbeit. Er wird allgemein als User Activated Soft Fork bezeichnet. Die Idee ist, mit einem BIP9-artigen Deployment anzufangen, aber mit der Ausnahme, dass wenn das Deployment nicht lange vor dem Timeout in den Zustand LOCKED_IN übergeht, solche Blocks abgelehnt werden, die nicht die Fork signalisieren. Das wird im Effekt für 100% Unterstützung sorgen, weil nicht konforme Blocks nicht mehr zählen werden und das Deployment dann schnell zu LOCKED_IN wird.

11.4. Zusammenfassung

Dieses Kapitel hat dir Hard Forks und Soft Forks beigebracht, und wie Soft Forks ohne Chain Split ausgerollt werden können. Wir haben über mehrere Miner-aktivierte Soft Forks und ein paar User-aktivierte Soft Forks gesprochen.

Wir können Hard Forks und Soft Forks wie hier gezeigt verdeutlichen.

u11 10

Bei einer Hard Fork werden die Regeln gelockert, sodass ein NEU Block anhand der ALT Regeln ungültig sein könnte. Im Fall eines Blockchain Splits könnte der NEU Zweig durch den ALT Zweig ausgelöscht werden.

In einer Soft Fork werden die Regeln eingeengt. ALT Blocks könnten, gemäss der NEU Regeln ungültig sein. Im Falle eines Blockchain Split riskiert der ALT Zweig seine Auslöschung.

Man kann eine Hard Fork gegen Auslöschung schützen, indem man vorsätzlich den NEU Zweig zum ALT Zweig inkompatibel macht. Zum Beispiel verlangt Bitcoin Cash, dass der erste Block nach dem Split eine Basisgrösse > 1.000.000 Byte haben muss, was laut der ALT Regeln ungültig ist. Man kann aber nicht den ALT Zweig in einer Soft Fork vor Auslöschung schützen.

Um eine Soft Fork auszurollen muss man aufpassen, die Blockchain nicht zu splitten. Wenn ein Split passiert, und beide Zweige eine längere Zeit aktiv bleiben, verursacht das eine Menge Schmerzen für die User, Exchanges, Miner und so weiter.

In einer Miner-aktivierten Soft Fork signalisieren Miner ihre Unterstützung; wenn zum Beispiel 95% der Blöcke Unterstützung signalisieren, fangen die neuen Regeln nach einer Schonfrist an durchgesetzt zu werden. BIP9 standardisiert diesen Prozess.

u11 11

Bei einer User Activated Soft Fork fangen die User ab einem bestimmten Tag (oder einer bestimmten Block Height) an, die neuen Regeln anzuwenden. Ein Standard dafür wird zum Zeitpunkt des Schreibens gerade erarbeitet, und wird wahrscheinlich ein Hybrid aus BIP9 und User Activated Soft Fork werden.

u11 12

Der Unterschied zu einem reinen BIP9 Deployment ist, dass die User Activated Soft Fork Prozess garantiert in den ACTIVE Zustand übergeht, wenn der Node einmal in den STARTED Zustand geht. Im STARTED Zustand haben Miner die Chance, das Deployment in einen LOCKED_IN Zustand zu befördern; aber wenn sie das nicht tun, und der Timeout abgelaufen ist, dann fangen die unterstützenden Full Nodes (und die Miner, die den Upgrade unterstützen) trotzdem damit an, die Regeln durchzusetzen.

Eine User Activated Soft Fork wurde benutzt, um BIP16, p2sh, auszurollen, aber das wurde manuell erledigt. Abgesehen davon hat die Gemeinde keine Erfahrung mit User Activated Soft Forks.

11.5. Übungen

11.5.1. Wärm dich auf

  1. Eine Soft Fork ist eine Änderung der Konsensregeln, aber was charakterisiert die Änderungen, die in einer Soft Fork gemacht werden?

  2. Angenommen, eine Hard Fork verursacht einen Blockchain Split, und der NEU Zweig hat 51% der Hashrate. Nimm ausserdem an, dass die Hashrate auf dem NEU Zweig auf ungefähr 45% absinkt.

    1. Was wird irgendwann passieren?

    2. Warum habe ich gesagt, das Ereignis wird eventuell passieren? Wann passiert es?

    3. Was können die Entwickler von Bitcoin NEU tun, um das Ereignis zu verhindern?

  3. Angenommen, ein ALT Node verursacht einen Blockchain Split wegen einer Soft Fork, bei der 80% der Hashrate Bitcoin NEU benutzt. Wird der ALT Zweig des Splits lange überleben? Erläutere deine Antwort.

  4. Angenommen, du versuchst, eine Soft Fork mittels BIP9 auszurollen. Dein Deployment hat gerade den LOCKED_IN Zustand erreicht. Wie lange musst du warten, bevor deine Regeln anfangen durchgesetzt zu werden?

11.5.2. Grabe tiefer

  1. Angenommen, eine Fork ändert die Konsensregeln so, dass ALT Nodes Blocks erzeugen können, die für NEU Nodes ungültig sind, und NEU Nodes können Blocks produzieren, die für ALT Nodes ungültig sind.

    u11 13

    Welche Nodes (NEU, ALT, beide oder keine) könnten einen Blockchain Split verursachen, wenn diese Fork ausgerollt wird?

  2. Warum ist es wünschenswert, eine beruhigende Mehrheit der Hashrate zu haben, die Bitcoin NEU bei einer Soft Fork unterstützt, bevor man damit anfängt, die neuen Regeln durchzusetzen?

  3. Angenommen, eine Hard Fork hat einen dauerhaften Blockchain Split verursacht und du bist dabei, eine Zahlung mittels Bitcoin NEU durchzuführen. Warum ist Replay Protection in diesem Fall wünschenswert?

  4. Angenommen, du willst eine Soft Fork mittels BIP9 ausrollen mit folgenden Parametern:

    Bit:        12
    Startzeit: 2027-01-01 00:00:00
    Timeout:    2028-01-01 00:00:00

    Weiter angenommen, dass das Deployment im STARTED Zustand ist, alle 2016 Blocks in der aktuellen Retarget Periode produziert worden sind, und alle Blocks Unterstützung mittels Bit 12 signalisieren. Der letzte (2016te) Block, B1, in der aktuellen Retarget Periode hat folgende Eigenschaften:

    Timestamp T1:          2027-12-31 23:59:59
    Median Time Past MTP1: 2027-12-31 23:59:58

    Wird dieses Deployment irgendwann in den Zustand ACTIVE gehen?

  5. Angenommen, du willst eine User Activated Soft Fork machen. Du findest es schwer, andere User zur Benutzung deiner Software zu überzeugen. Was würde am Flag Day passieren, wenn nur ein kleiner wirtschaftlicher Prozentsatz (<30%) deine Software ausführen würde?

  6. Angenommen, du willst eine User Activated Soft Fork machen. Viele andere Nutzer scheinen deine Soft Fork zu mögen. Sagen wir, 80% der Wirtschaft installiert deine Fork. Warum werden Miner (auch diejenigen, denen Ihre Änderung nicht gefällt) während dieser vom Benutzer aktivierten Soft Fork wahrscheinlich zu den neuen Regeln wechseln?

  7. In der vorangegangenen Übung hatte deine Soft Fork eine Unterstützung von 80% der Wirtschaft. Nimm ausserdem an, dass eine Mehrheit der Hashrate beschliesst, deinen NEU Regeln zu folgen. Was passiert mit nicht-minenden Nodes, die deiner Fork nicht folgen?

11.6. Zusammenfassung

  • Du willst keinen Blockchain Split beim Ausrollen einer Fork, weil das eine Störung in der Bitcoin Wirtschaft bedeuten würde.

  • Eine Hard Fork ist eine Änderung der Konsensregeln, die jeden Miner zum Upgrade zwingt. Ansonsten erfolgt ein Blockchain Split.

  • Eine Soft Fork ist eine Änderung der Konsensregeln, die kein gleichzeitiges Upgrade des gesamten Netzwerks verlangt.

  • Während eines Blockchain Splits wegen einer Hard Fork möchtest du Wipeout Protection haben, um sicherzustellen, dass der NEU Zweig nicht von den ALT Nodes weg reorganisiert wird.

  • Bei einem Blockchain Split möchtest du Replay Protection, um den Zweig auswählen zu können, auf dem deine Transaktionen durchgeführt werden.

  • Eine Miner-activierte Soft Fork–zum Beispiel, eine die BIP9 zum Ausrollen benutzt–lässt Miner eine nicht kontroverse Soft Fork ausrollen.

  • Eine User Activated Soft Fork lässt User eine Soft Fork ausrollen. Wenn eine Hashrate Mehrheit irgendwann folgt, ist die Soft Fork ohne bleibenden Blockchain Split erfolgreich.