Was ist Segregated Witness?

Segregated Witness


In diesem Beitrag möchten wir  ihnen das Konzept von Segregated Witness näher bringen, welches von Peter Wuille vorgestellt wurde. Nach Möglichkeit wollen wir nicht sehr ins technische abwandern, außer es ist notwendig 🙂

Zusammenfassung

Segregated Witness, auch bekannter als SegWit, ist der Prozess in dem Daten, genauer Daten welche sich auf Signaturen beziehen, aus Bitcoin Transaktionen entnommen werden, dadurch schrumpft die Transaktionsgröße.
In Folge dessen nimmt auch die Größe des Transaktionsblockes ab bzw. es passen mehr Transaktion in einen Block bei der selben Größe.
Segregated Witness (segwit) ist eine Soft-Fork, ermöglicht Transkations-erstellender Software nach Aktivierung das abspalten von Transaktions-Signaturen von den Transaktionsdaten, welche von der Transaktions-ID (bzw. Hash) abgedeckt werden.

Was sind die Vorteile von Segregated Witness?

Das Folgende Video (12m) erklärt in Kürze alle Änderungen an den Transaktionsblöcken, Untertitel in Deutsch aktivieren.


  • Gewichtung von Daten
  • Signature deckt (Sende)Beträge ab
  • Sighash-Operationen skalieren linear
  • Erhöhte Sicherheit bei Multi-Sig
  • effizientere Sicherheit für beinah Full-Node-Clients
  • Script versioning

Wie wird es implementiert?


Für die Aktivierung von Segregated Witness gibt es mehrere Möglichkeiten, am Anfang lag dieser Vorschlag zu Grunde:
Sobald 95% aller Mining-Nodes (Miner) ihre Bereitschaft signalisieren aktiviert diese automatisch, um Bereitschaft zu signalisieren müssen sie lediglich BitcoinCore v0.13.1 oder neuer installiert haben.

Die SegWit-Soft-Fork wurde so implementiert, dass Nutzer beider Lager (pro- & contra-SegWit) ihre Bereitschaft SegWit zu verabschieden signalisieren können

Um dies zu tuen haben Miner innerhalb des Zeitraumes vom 15. November 2016 an bis einschließlich 15. November 2017 die Möglichkeit, in von ihren gefundenen Transaktionsblöcken das Feld für die sogenannte „blockheader version“ auf den bit-Wert von zu setzen.

Der Zuspruch für SegWit wird konstant gemessen, indem die letzten 2016 Transaktionblöcke betrachtet werden (also etwas weniger als alle Transaktions-Blöcke der letzten 2 Wochen / 2016 Blöcke = 2 Wochen). Dieser Zeitraum wird bereits genutzt um die Schwierigkeit des Bitcoin-Netwerkes an die aktuelle Rechenleistung anzupassen.

Diese Länge von 2 Wochen bzw. 2016 Transaktions-Blöcken, stellt eine Aktivierungs-Periode dar. SegWit hat 26 Aktivierungsperioden Zeit das gesteckte Ziel zu erreichen.

Sollte in diesem Zeitraum eine Zustimmung von 95% erreicht werden, aktiviert SegWit.

Wie ist der aktuelle Zuspruch für SegWit?

Der aktuelle Stand lässt sich schnell und einfach auf segwit.co verfolgen, sowohl für die letzte Aktivierungs-Periode, die letzten 144 Blöcke und die letzten 2016 Blöcke.

Was ist die genaue Änderung?

Bitcoin Block ante-SegWit

Wir schauen uns erstmal die momentane Struktur eines Blockes an, bevor wir schauen welche Veränderungen Segregated Witness mit sich bringt und welche Auswirkungen es hat.

Hier sehen wir, aus welchen Komponenten sich ein Bitcoin Block zusammen setzt ohne SegWit.

Ein Block besteht aus einem Kopf (auch Header genannt) sowie einem Rumpf, welcher die eigentlichen Transaktionsinformationen erhält.

Der Kopf besteht aus vier Komponenten á 4 bytes und zwei mit jeweils 32 bytes, dies ergibt 80 bytes für den Block-Kopf (Block-Header).

Dazu kommt die Transaktions-Anzahl (auch Transaction Counter genannt) mit 1-9 bytes und der Rest steht für die Transaktionen selbst zur Verfügung, also der Großteil eines Blockes.

Der Block-Kopf und der Zähler der Transaktionen machen lediglich ca. 90 der 1.000.000 zur Verfügung stehenden bytes aus.

Transaktionen beanspruchen
0%
der Daten

Der Großteil der Daten geht also für die Informationen über die eigentlichen Transaktionen drauf.
In einen Block passen momentan etwa 2500 Transaktionen maximal. Was nimmt dort den meisten Platz weg?
Um das zu verstehen schauen wir uns am besten mal die einzelnen Komponenten einer Transaktion an, auch diese nutzt kein SegWit, entspricht also einer klassischen Transaktion:

Hier haben wir analog zu oben alle Komponenten einer Bitcoin Transaktion. Wir haben keine feste Größe an der wir uns orientieren können, da zwei Komponenten einer Transaktion (Liste der Ein- & Ausgänge) variable Größen haben, also theoretisch beliebig groß sein können.

  • Versions-Nummer:
    Diese ist standardmäßig immer 1, erst nach der Aktivierung kann man von ihr sinnvoll gebrauch machen. (Beispielsweise könnte nachdem SegWit aktiviert wurde, folgende Neuerungen unter einer eigenen Versionsnummer gebündelt und implementiert werden)
  • Anzahl-Eingänge:
    Zähler für Anzahl der Eingänge (Inputs), welche in der Transaktion verbraucht werden.
  • Liste der Eingänge, welche für jeden Eingang folgendes beinhaltet:
    • vorhergehender Transaktions-Hash:
      In welcher Transaktion haben wir das Geld erhalten?
    • vorhergehender Transaktions-Index:
      An wievielter Stelle der Ausgänge findet sich unser Ausgang?
    • TX-Signatur-Länge:
      Wie lang ist die Signatur?
    • Signatur:
      Die eigentliche Signatur, der Beweis, dass ich der rechtmäßige Besitzer des Geldes bin.
    • Sequenz-Nr (CSV)
      Gedacht um das aktualisieren einer Transaktion zu erlauben, ist diese kleiner als maximum (0xffffffff), kann eine LockTime spezifiziert werden (Transaktion kann nicht eingebettet werden in einen Block bevor diese Bedingung nicht erfüllt ist).
  • Anzahl-Ausgänge:
    Zähler für Anzahl der Ausgänge (Outputs) die durch die Transaktion neu erstellt werden.
  • Liste der Ausgänge
    • Wert:
      Der zu Betrag bzw. Menge die wir senden wollen. Da wir an beliebig viele schicken könnten, Gräße unbestimmt bzw. variiert.
    • Transaktions-Ausgang-Skript-Länge:
      Die Länge des Skriptes für diesen Transaktions-Ausgang
    • Transaktions-Ausgang-Skript:
      Das eigentliche Skript, welches befriedigt werden muss (Ergebnis = True / Wahr) um über das Geld zu verfügen.
  • Sperr-Zeit (Lock Time):
    Früheste Zeit in der diese Transaktion ausgeführt werden darf (angegeben als Bitcoin-BlockNr.)

Wie wir sehen ist die Signatur ein fester Bestandteil eines jeden genutzten Eingangs, dies macht einen Großteil der gesamten Transaktionsgröße aus. Sie stellt sicher, dass Geld lediglich von jenen ausgegeben werden die darüber verfügen dürfen. Dafür ist es jedoch nicht notwendig die Daten selbst einzupflegen, eine Referenz welche nicht gefälscht werden kann, wäre bereits ausreichend, so dass diese verifiziert & validiert werden können.

Genau dies tut SegWit, daher auch der Name Segregated Witness, welches übersetzt in etwa „losgelöster Zeuge“ bedeutet und anspielt auf das auslagern der Signatur.

Exkurs: Merkle-Wurzel (Merkle-Root)

Eine besondere Aufgabe kommt der sogenannten Merkle-Wurzel zu gute, Sie fasst alle Inhalte eines Blockes zusammen in einem einzelnen Hash und dient als eine Art Prüfsumme und Inhaltsverzeichnis eines Blockes.

Hier erklären wir kurz was eine Merkle-Wurzel ist:

Eine der Komponenten im Block-Kopf ist die Merkle Wurzel, welche es erlaubt
Transaktionen zu verifizieren, ohne den Großteil ihrer Teile zu kennen.
Sie wird erstellt, indem wir jede Transaktions-ID (Transaktions-Hash) eines Blockes in Paaren zusammen „hashen“, so entsteht ein so genannter Merkle-Baum, bis lediglich noch ein Hash übrig bleibt,
diesen nennt man die Merkle-Wurzel oder Merkle Root im Englischen.

Eine der Komponenten im Block-Kopf ist die Merkle Wurzel, welche es erlaubt
Transaktionen zu verifizieren, ohne den Großteil ihrer Teile zu kennen.
Sie wird erstellt, indem wir jede Transaktions-ID (Transaktions-Hash) eines Blockes in Paaren zusammen „hashen“, so entsteht ein so genannter Merkle-Baum, bis lediglich noch ein Hash übrig bleibt,
diesen nennt man die Merkle-Wurzel oder Merkle Root im Englischen.
Witness-Daten werden nicht länger von der Transaktions-ID umfasst, dennoch
müssen diese der Transaktion hinzugefügt werden, ansonsten ist der Block nicht gültig.

Daher wird ein weiterer Merkel-Baum, welcher die gesamten Transaktionsdaten erfasst,
benötigt. Indem dieser mit der ersten Transaktion des „klassischen“ Merkel-Baumes
verknüpft wird, verbindet man erfolgreich die Witness-Daten mit den Transaktionen und erlaubt es Segregated Witness kompatibel mit älteren Versionen zu sein.
Durch diese neue Block-Struktur akzeptieren auch ältere Bitcoin-Klienten diese
Blöcke als gültig, obwohl sie, wie bereits bei anderen Verbesserungen in Bitcoin
diese nicht vollständig verstehen kann. SegWit-kompatible Klienten können diese Blöcke
jedoch vollständig validieren.

Was ändert sich durch Segregated Witness?

Bitcoin Block posterior SegWit

Wir schauen uns erstmal die momentane Struktur eines Blockes an, bevor wir schauen welche Veränderungen Segregated Witness mit sich bringt und welche Auswirkungen es hat.

Hier sehen wir, aus welchen Komponenten sich eine Bitcoin Transaktion zusammen setzt nach der Implementierung von Segregated Witness.

Die Komponenten sind die selben, jedoch wandert die Signatur selbst aus der Komponente „Liste der Eingänge“ und wird stattdessen referenziert.
Somit verliert „Liste der Eingänge“ die Unterkomponente, welche den meisten Speicherplatz einnimmt und als einzige in Größe variiert.
Diese findet sich als neue „Witness“ -Komponente am Ende der Transaktion.

Der Rest bleibt verhältnismäßig ähnlich. Dadurch das die Signatur etwa 65% der Größe ausmacht, nimmt diese Transaktion weniger Platz innerhalb eines Blockes weg, wodurch insgesamt mehr Transaktionen hinein passen.


Hat ihnen dieser Artikel gefallen?
Lassen Sie ihre Freunde teilhaben!
Bleiben Sie up-to-date!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.