Die Wahrscheinlichkeit ist hoch, dass man als Nutzer von Bitcoin früher oder später über den Begriff Segwit stolpern wird. Ob bei der Wahl des Adressformats, einer Diskussion über die Blockgröße oder einfach nur günstigeren Transaktionsgebühren - um das Segregated Witness Update, welches am 24. August 2017, also vor genau sechs Jahren im Bitcoin-Netzwerk aktiviert wurde, kommt man dabei nicht herum. Doch wie funktioniert und vor allem worum ging es bei diesem Update überhaupt? Warum bezahlt man für "Segwit Transaktionen" weniger Gebühren und was hat es mit den eigenartigen "virtuellen Größen" auf sich?

All diese Fragen und mehr klären wir in diesem ausführlichen Geburtstags-Beitrag über eines der wichtigsten Bitcoin-Updates jemals.

The Blocksize War

Im Jahr 2017 war die Bitcoin-Welt noch eine andere. Die langjährige Diskussion um eine Erhöhung der maximalen Blockgröße und allgemein der Frage, wie und ob das Bitcoin-Netzwerk zukünftig skalieren kann, spaltete die Community in zwei aufgeheizte Lager. Während die Befürworter einer Erhöhung der Blockgröße überzeugt waren, es gäbe keinen anderen Weg für Bitcoin, sich als funktionierendes Zahlungsmittel zu etablieren, verfolgten die Small Blocker einen vorsichtigeren Ansatz und machten sich neben der eigentlichen Frage der Blockgröße auch viele berechtigte Gedanken darüber, wie man einen solchen kritischen Eingriff in das Bitcoin-Protokoll sicher umsetzen und vor allem aktivieren sollte.

Bitcoin-Entwickler Peter Wuille, Johnson Lau und Eric Lombrozo schlugen mit Segwit einen eleganten Kompromiss vor. Erstens, weil man versuchte den Large Blockern mit einer indirekt erhöhten Blockgröße entgegenzukommen und zweitens, da man ganz nebenbei noch einige weitere Verbesserungen erzielen und gleich mehrere Fliegen mit einer Klappe schlagen konnte. All das mithilfe einer Soft Fork, also einer Einschränkung der Regeln, die vor allem bei einer derart kontrovers diskutierten Regeländerung das Mittel der ersten Wahl ist.

Mehr über die Geschichte von Segwit: Der Bitcoin „Independence Day“

Ausgelagerter Zeuge

Im kryptografischen Kontext versteht man unter dem Begriff "Witness" ganz allgemein Daten, die in irgendeiner Form eine kryptografische Aufgabe lösen. Im Bitcoin-Kontext sind hier in der Regel digitale Signaturen gemeint, die benötigt werden, um den Besitz eines privaten Schlüssels zu beweisen und Bitcoin auszugeben. Sämtliche dieser Daten, welche wir im folgenden einfach zusammengefasst als Witness bezeichnen, stehen eigentlich direkt in der entsprechenden Transaktion und tragen somit auch zur maximalen Blockgröße von 1 MB bei.

Wie der Name schon verrät, lagert man mit Segwit genau diese Daten einfach aus und speichert sie getrennt an anderer Stelle, nämlich nicht im eigentlichen Block, ab. Vorstellen kann man sich das wie einen Anhänger. Zunächst sollte allerdings klargestellt werden, dass es sich bei Segwit nicht um eine Veränderung des Inhalts, sondern erstmal nur der Architektur bzw. dem Aufbau von Transaktionen handelt. Die ausgelagerten Signaturdaten sind schließlich essenziell, um eine Bitcoin-Transaktion auf ihre Gültigkeit zu prüfen und können nicht einfach weggelassen werden. Deshalb wird an der ursprünglichen Stelle, also direkt in der eigentlichen Transaktion, mit einer Art Wegweiser auf den Witness-Anhänger verwiesen, in dem man unter anderem die entsprechende digitale Signatur wiederfinden wird.

Quelle: txstreet.com

Der Witness Discount

Doch was soll das ganze überhaupt? Durch die Auslagerung von Daten aus dem eigentlichen Block gibt es zunächst eine offensichtliche Veränderung: eine Erhöhung der maximalen Blockgröße. Zwar bleibt das offizielle Limit von 1 MB bestehen, es passen aber plötzlich mehr Transaktionen in einen Block, da schließlich ein relativer großer Teil der Transaktionsdaten ausgelagert wurde.

Allerdings ist natürlich auch dieser neue Witness-Anhänger in seiner Größe nicht unbegrenzt. Vereinfacht gesagt wurde die maximale Blockgröße von 1 MB auf 4 MB erhöht, doch das ist in der Praxis in den allermeisten Fällen (mit wenigen Ausnahmen) nicht wirklich korrekt. Wer sich mit einem Block-Explorer etwas umsieht, dem fällt schnell auf, dass die meisten Blöcke zwar voll, aber dennoch unterschiedlich groß und doch recht weit von 4 MB entfernt sind. Um diese Variabilität in den Blockgrößen zu verstehen, müssen wir uns anschauen, wie die Größe einer Transaktion seit dem Segwit-Update überhaupt berechnet wird.

Gewicht

Mit Segwit wurde eine neue Einheit zur Ermittlung der Größe einer Transaktion eingeführt: das Gewicht. Es berechnet sich aus den tatsächlichen Größen der ausgelagerten Daten im Witness und den Daten im "normalen" Teil des Blocks, allerdings mit einer Besonderheit: Letzterer wird um den Faktor vier stärker gewichtet, während die Größe der Daten im Witness nur einfach dazu addiert wird. Aus 10 Byte im normalen Block und einem Byte im Witness werden 41 Weight Units (WU), also "Gewichtseinheiten", die man sich einfach so neu definiert. Aus einem Byte im normalen Block und 10 Byte im Witness ergeben sich entsprechend nur 14 solcher Gewichtseinheiten. Schnell wird klar, dass Daten im Witness um einiges "günstiger" sind, da sie weniger zum Gesamtgewicht beitragen. Wichtig zu verstehen ist allerdings, dass diese Vergünstigung mit den tatsächlichen rohen Daten, die am Ende des Tages auf einer Festplatte gespeichert werden müssen, nichts zu tun hat. Es handelt sich um eine komplett konstruierte Einheit, um den zusätzlich gewonnen Speicherplatz, vor allem in Bezug auf die anfallenden Transaktionsgebühren, darstellen zu können.

Die maximale Blockgröße beträgt seit der Aktivierung von Segwit also nicht mehr 1 MB, sondern 4 000 000 WU, oder auch 4 MWU. Würde man einen Block ausschließlich mit Daten im Witness füllen, könnte man also theoretisch einen 4 MB großen Block bauen. Andersherum stößt man wieder auf die ursprüngliche Grenze von 1 MB, sobald man den Witness komplett leer lässt. In der Realität liegt man wie so oft irgendwo in der Mitte dieser beiden Extreme, da bei regulären Bitcoin-Transaktionen sowohl normale Daten, als auch Daten im Witness wie z.B. digitale Signaturen anfallen.

Beispielhafte Darstellung für einen "vollen" Segwit-Block

Aus diesem Grund sind die meisten Bitcoin-Blöcke auch ungefähr 2 MB groß und unterscheiden sich in ihrer tatsächlichen Größe stark, da diese stets von der Aufteilung der Daten in und außerhalb des Witness abhängt.

Virtuelle Größe

Eine weitere Einheit, die man vor allem beim Erstellen einer Bitcoin-Transaktion nur schwer ignorieren kann, ist die sogenannte virtuelle Größe. Ein ziemlich verwirrender und abstrakter Name, der sich mit dem Wissen aus dem vorherigen Absatz aber recht leicht erläutern lässt.

Ein virtuelles Byte (1 vB) entspricht nämlich einfach 4 Gewichtseinheiten (4 WU). Es handelt sich also um das durch vier geteilte Gewicht. Der Zweck dieser Einheit ist eine Annäherung an die herkömmliche Größenangabe in Byte, allerdings mit dem Zusatz, den zusätzlichen Speicherplatz des ausgelagerten Witness bereits mit einzuberechnen. Die Größe in virtuellen Byte hat also nichts mit der tatsächlichen Größe in Byte zu tun, sondern dient zur besseren Einordnung der Transaktionsgebühren (in sat/vB) und wird auch genau dafür in der Praxis verwendet. Da man mit einem Block-Explorer in der Regel immer im Kontext von Transaktionsgebühren unterwegs ist, wird man auch fast ausschließlich mit dieser Einheit in Berührung kommen.


 

Transaction Malleability

Vor der Aktivierung von Segwit hatten Bitcoin-Transaktionen eine Eigenschaft, die vor allem bei komplexeren Anwendungsfällen, wie dem Lightning-Netzwerk, zu Problemen geführt hätte. Unter Transaction Malleability versteht man ganz allgemein die Möglichkeit der Manipulation einer Transaktion, ohne dabei ihre Gültigkeit zu verletzen. Genau das war vor 2017 noch möglich, wenn auch in geringem Ausmaß, unter anderem durch kleinere Veränderungen an den digitalen Signaturen.

Jede Transaktion kann eindeutig durch ihre Transaktions-ID (TXID) identifiziert werden. Diese ist nichts anderes als ein Hashwert der Transaktion selbst, um auch bei kleinsten Veränderungen stets einen komplett neuen Fingerabdruck zu erzeugen. Wird nun also ein winziges Detail in der Transaktion verändert, ohne die digitale Signatur zu verletzen, so entsteht eine neue TXID, während die Transaktion selbst gültig bleibt. Dieses Verhalten führt genau dann zu Problemen, wenn man sich auf die Unveränderlichkeit eben dieser TXID verlassen muss, beispielsweise beim Sicherheitsmodell eines Zahlungskanals im Lightning-Netzwerk.

Die mit Segwit ausgelagerten Signaturdaten hingegen fließen nicht mehr in die Berechnung der klassischen TXID mit ein, sie stehen schließlich "woanders", können also auch nicht mehr manipulativ ausgenutzt werden, um die ID einer Transaktion zu verändern. Solange eine Transaktion also ausschließlich Segwit-Outputs ausgibt, ist das Problem beseitigt und viele Anwendungsfälle eröffnen sich.

Weitere Vorteile

Neben dem wahrscheinlich wichtigsten Aspekt der Transaction Malleability bringt das Segwit-Update noch einige weitere Vorteile mit sich, unter anderem:

  • Skalierung: Die Witness-Daten machen häufig den größten Teil einer Transaktion aus, sind aber, sobald diese einmal verifiziert wurde, nicht weiter relevant. Durch die saubere Trennung von den restlichen Transaktions-Daten können Bitcoin-Nodes die Daten im Witness also einfach verwerfen oder nur getrennt von anderen Teilnehmern im Netzwerk anfragen, und somit Platz und Ressourcen sparen.
  • Effizientere Verifizierung: Mit Segwit wurden die Funktionen zur Verifizierung von digitalen Signaturen deutlich verbessert und haben eine um ein Vielfaches geringere Komplexität. Bitcoin-Nodes werden dadurch also in einem weiteren Aspekt entlastet.
  • Zukunftssicherheit: Die Bitcoin-Script Sprache erhielt mit Segwit eine Versionierung, kann also in Zukunft laufend aktualisiert werden, ohne für Kompatibilitäts-Probleme mit vorherigen Versionen zu sorgen. Das Vorzeigebeispiel hierfür ist das seit November 2021 aktivierte Taproot-Update.

Mehr als ein Rabatt

Die allermeisten assoziieren den Begriff "Segwit" vor allem mit günstigeren Gebühren - und das ist eigentlich auch gut so. Das Segwit-Update ist kompliziert und bringt einige sehr spezifische Verbesserungen mit sich, die dem durchschnittlichen Bitcoin-Nutzer nicht geläufig sind und auch gar nicht geläufig sein müssen.

Mit der indirekten Erhöhung der maximalen Blockgröße und dem damit ermöglichten Gebührenvorteil wird in erster Linie ein Anreiz geschaffen, auf das Segwit-Adressformat zu wechseln und damit auch selbst von Segwit zu profitieren - und zwar nicht nur finanziell. Der Plan hat funktioniert, denn mittlerweile nutzt nur noch ein kleiner Bruchteil von 5% aller Zahlungen im Bitcoin-Netzwerk das veraltete Legacy-Format. Happy Birthday!