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.
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.
Ä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.
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.
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).
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
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.
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.
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 eineinv
oderheaders
Nachricht zu schicken. -
Im niedrigbandbreiten-Modus wird die
cmpctblock
Message nur nach Bedarf geschickt, nachdem eineinv
oderheaders
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
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).
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.
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.
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.
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
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).
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).
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).
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).
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).
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.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).
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).
/P2SH/
in das Signatur Script der Coinbase Transaktion einträgt.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.
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.
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).
Die Aktivierung der Soft Forks geschah schrittweise durch Signalisierung mittels Blockversionsnummern, um einen Split der Blockchain zu verhindern:
-
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.
Abbildung 19. Minder, die die Soft Fork betreiben, signalisieren Unterstützung für diese, indem sie die Blockversion erhöhen. -
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.
-
Beginne neuproduzierte Version 2 Blocks abzulehnen, die nicht die Height in der Coinbase tragen. Diese Blocks signalisieren falsch bezüglich BIP34.
-
Warte, bis 950 der letzten 1.000 Blocks eine Version ≥2 haben. Wenn das passiert, haben die NEU Miner ungefähr 95% der Hashrate.
-
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.
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).
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.
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.
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
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.
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.
-
ACTIVE
—Die neuen Regeln sind aktiv. -
FAILED
—Der Timeout ist abgelaufen, bevor der Ausrollvorgang den ZustandLOCKED_IN
erreicht hatte. Bei gleichzeitigem Eintreten mehrerer Bedingungen hat der Timeout Vorrang vor anderen Bedingungen wie der 95% Regel.
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
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.
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
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.
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
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
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
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.
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.
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).
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).
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).
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
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.
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.
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.
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
-
Eine Soft Fork ist eine Änderung der Konsensregeln, aber was charakterisiert die Änderungen, die in einer Soft Fork gemacht werden?
-
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.
-
Was wird irgendwann passieren?
-
Warum habe ich gesagt, das Ereignis wird eventuell passieren? Wann passiert es?
-
Was können die Entwickler von Bitcoin NEU tun, um das Ereignis zu verhindern?
-
-
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.
-
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
-
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.
Welche Nodes (NEU, ALT, beide oder keine) könnten einen Blockchain Split verursachen, wenn diese Fork ausgerollt wird?
-
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?
-
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?
-
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? -
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?
-
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?
-
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.