Da müssen wir jetzt durch. Für die Kernentwickler ist Segregated Witness die bessere Alternative zur Erhöhung der Blocksize. Wie funktioniert das – und warum bevorzugen es die Core-Entwickler?
Segregated Witness wurde zuerst bekannt, als Pieter Wuille es auf dem zweiten Scaling-Bitcoin-Workshop vorstellte und erklärte, man könnte mit Segregated Witness die Kapazität um das 2- bis 4fache erhöhen. Und das per Softfork, und zugleich mit anderen wünschenswerten Vorteilen.
Einige Tage später schlug Gregory Maxwell in einer Mail vor, Segregated Witness so schnell wie möglich (ASAP) zu implementieren, um sich Zeit für die weitere Skalierung zu verschaffen. Gregory Maxwell zog sich kurz danach aus der Kernentwicklung zurück, doch die anderen Kernentwickler haben seine E-Mail zum offiziellen Fahrplan für die Kapazitätserhöhung gemacht. Segregated Witness ist damit die einzige kurzfristige Antwort von Core auf das Scalability-Problem.
Was aber bedeutet Segregated Witness?
Kurz und schmerzhaft: Man entfernt die Signaturen aus den Transaktionen und stopft sie in ein separates Paket. Das spart an sich zwar keine Bandbreite – da die Signaturen ja doch durchs Netz geschickt werden müssen – aber man kann mehr Transaktionen in die Blöcke packen, ohne deren Größe formal zu erhöhen. Es is quasi ein Hack.
Etwas genauer: Schauen wir uns hierfür kurz an, was eine Transaktion ist. Sie besteht aus zwei Teilen: dem Input, der die Herkunft der Bitcoins angibt, und dem Output, der das Ziel der Bitcoins angibt. Beide bestehen aus Scripten. Das Script scriptPubKey für den Output gibt etwa den öffentlichen Schlüssel des Ziel an sowie in der Regel die Bedingung, dass die Bitcoins künftig nur als Input gültig sind, wenn man in das scriptSigs eine oder mehrere Signaturen der privaten Schlüssel einfügt. Daher braucht man den privaten Schlüssel, um Bitcoin zu versenden. Man kann nun aber – das ist der Hack – in das Output-Script hineinschreiben, dass jeder der Lust hat die Bitcoins ausgeben darf. Das nennt sich „anyonecanspend“, und davon ist, aus leicht verständlichen Gründen, im Normalbetrieb abzuraten.
Interessant an „anyonecanspend“ ist jedoch, dass die Bitcoins danach ausgegeben werden können, ohne dass man eine Signatur in einer Transaktion speichert. Clienten, die Segregated Witness nicht aktiviert haben, sehen eine „anyonecanspend“-Transaktion. Clienten mit Segregated Witness hingegen finden im Script eine weitere kleine Info, die sie darauf hinweist, dass die Signatur im Segregated Witness zu speichern ist. So können die alten Clienten die Transaktionen mehr oder weniger ignorieren, während die, die Segregated Witness bereits aktiviert haben, Transaktionen mit ausgelagerter Signatur empfangen und versenden können. Da eine Signatur relativ lang ist, wird so zumindest die Transaktion deutlich kleiner und man spart Transaktionsgebühren – die abhängig von der Größe in Kilobyte berechnet werden.
Alles soweit klar?
Es sollte offensichtlich sein, dass man mit Segregated Witness die Kapazität eines Blocks erhöht, indem man darauf verzichtet, die Signaturen reinzustopfen. Laut Pieter Wuille sparen gewöhnlichen Transaktionen etwa 50% und multi-sig-Transaktionen bis zu 75%. Dies entspräche einer Blockgröße von 2-4MB (bzw. 1,75-4mb, je nach Quelle). Die Blöcke sind offiziell maximal 1 MB groß, es werden aber 2 bis 4 MB durchs Netzwerk geschickt.
Segregated Witness kann, anders als eine Erhöhung der Blockgröße, als Softfork eingeführt werden. Das bedeutet, dass nur 95% der Miner updaten müssen, damit die Funktion aktiviert wird, während Clients, die nicht updaten, einfach eine Funktion weniger haben, aber ansonsten weiter funktionieren. Voraussichtlich wird es also etwas dauern, bis sich Segregated Witness im Netzwerk ausbreitet und seine volle Stärke entfaltet. Für Core ist das ein Vorteil, da man so ohne gefährliche Hard-Fork – die alle alten Clients rauswirft – die Kapazität erhöhen kann.
Wenn es nur ums Skalieren geht, ist Segregated Witness allerdings eine sehr unpraktische Methode. Nicht nur, dass man mit relativ großem Aufwand eine relativ kleine, einmalige Kapazitätserhöhung erreicht – Segregated Witness bringt im Alltagsgeschäft maximal eine Erhöhung auf 2 MB, birgt aber dieselben Gefahren wie 4MB. Wenn man bestimmte Multi-Sig-Transaktionen baut, kann man einem Block die Kapazität vo 4 MB verleihen. In diesem Fall kommen alle Angriffe – Spam oder Riesentransaktionen – mit derselben Wucht daher wie mit 4 MB Blöcken.
D.h. wir brauchen ein Niveau der Sicherheit, dass nur in den seltensten Fällen nötig ist. Das ist etwa so, als würde man eine 4-Liter-Flasche kaufen um 2 Liter Wodka zu verschenken. Wenn wir später, nach SegWit, noch einmal die Kapazität erhöhen wollen, brauchen wir eventuell größere Blöcke. Um die normale Kapazität von 1,75 auf sagen wir 7 MB zu erhöhen, müssen wir gegen Angriffe bis zu 16 MB gewappnet sein. Und so weiter. Das ist sicherlich keine Katastrophe, aber auch nicht eben hilfreich.
Die Kernentwickler haben sich jedoch nicht ohne Grund für Segregated Witness entschieden. Zum einen, weil es per Softfork anstatt Hardfork einsetzbar ist. Damit kann man skalieren, ohne befürchten zu müssen, das Netzwerk zu zerbrechen. Zum anderen ist die Kapazitätserhöhung eher ein Nebeneffekt von Segregated Witness, das viele weitere Vorteile hat:
- Es beseitigt Malleable Transaktionen. Das ist kein brennendes Problem, eher ein Ärgernis, stört aber auch die Einführung des Lightning-Netzwerkes oder anderer Schichten um die Blockchain herum
- Es ermöglicht weitere Scriptarten über das Segregated Witness. Möglicherweise ebenso flexible, Turing vollständige Tranaktionsscripte wie in Ethereum.
- Über das Segregated Witness kann man sogenannte „Fraud Proofs“ einführen, die helfen, Light Wallets sicherer zu machen
Ich will – und kann – hier nicht auf jedes dieser Dinge im Detail eingehen. Das Lightning-Netzwerk soll die Kapazität des Bitcoins durch Payment-Channels anstatt die Blockgröße erhöhen und ist, daran zweifelt keiner, eine der Methoden, die notwendig sind, um Bitcoin irgendwann „wirklich“ zu skalieren (ein Niveau wie Visa zu erreichen, ein echtes großes Mikropayment zu ermöglichen). Man kann einfach nicht alle Transaktionen der Welt in die Blockchain packen.
Segregated Witness ist also durchaus sinnvoll im Kontext der Skalierung. Es ist auch möglich, dass der Kapazitätsanstieg, den es dem Netzwerk verleiht, fürs Erste ausreicht, sofern das Wachstum der Transaktionen etwas abflaut. Wenn man jedoch Bitcoin wirklich über die Blockgröße skalieren möchte, stellt Segregated Witness allerdings eher ein Hindernis dar. Von daher ende ich hier mit gemischten Gefühlen.
