UTXO und Schnorr: wie kleine Änderungen Platz auf der Blockchain sparen können
Erkenntnisse aus Mailand, Teil 3: Auch kleine Änderungen können einen großen Einfluss haben. Die Einführung von Schnorr-Signaturen und der sparsamere Umgang mit Unspent Outputs helfen, den bestehenden Platz auf der Blockchain besser auszunutzen.
Bitcoin zu skalieren ist, so meine große Erkenntnis von Scaling Bitcoin in Mailand, eine Operation, die auf vielen Feldern stattfindet. Die Blocksize ist nur eines davon und zwar dasjenige, auf dem es, so die scheinbar breite Überzeugung der Entwickler, am meisten zu verlieren und am wenigsten zu gewinnen gibt.
Über den offiziellen, nicht mehr zur Debatte stehenden Weg – SegWit und Lightning – habe ich ja schon öfters geschrieben. Auf dem Workshop wurde eine kleine Wasserstandsmeldung zu SegWit präsentiert – noch ein paar Bugfixes, dann kann es erscheinen – sowie drei Präsentationen zum Routing von Transaktionen in Lightning. Diese drei Präsentationen waren so beeindruckend wie ernüchternd: Beeindruckend, weil sie zeigen, wie viel Arbeit derzeit in das Payment-Channel-Netzwerk fließt, und ernüchternd, weil sie demonstrierten, wie viel noch zu tun ist.
Vielleicht spannender waren zwei Präsentationen, die sich um den “kleinen Dingen” widmeten: um die Verbesserungen, die aus dem vorhandenen Platz auf der Blockchain mehr rausholen oder dazu beitragen, dass sparsamer mit diesem umgegangen wird. Man könnte sagen, sie sind das Graubrot der Scalability – keine großen Durchbrüche, sondern kleine, sukzessive Optimierungen, mit denen sich nachhaltiger skalieren lässt. Beide berühren zudem zwei sehr spezifische Bestandteile von Bitcoin-Transaktionen.
20% Platz sparen: Schnorr aggregiert Input-Signaturen
Beginnen wir mit Schnorr-Signaturen. Präsentiert wurden diese von Pieter Wuille, einem der wichtigsten und am höchsten gelobten Entwickler von Core bzw. Blockstream. Er ist der Architekt von SegWit und einer der Hauptautoren von libsecp256k1, jener kryptographischen Library, die Core geschrieben hat, um die Validierung von Transaktionen deutlich zu beschleunigen. Wenn Wuille, der kleine Mann mit professoralem Rauschebart und runder Brille, der angeblich in Paris lebt, etwas sagt, dann hat es so sehr Hand und Fuß, dass es, um PieterWuilleFacts zu zitieren, “genügt, seinen Namen zu nennen, um Konsens herzustellen”.
Also, Pieter Wuille stellt Schnorr Signaturen vor. Diese Art von Signaturen wurden 1988 von Claus-Peter Schnorr, Mathematik-Professor in Frankfurt, erfunden und patentiert, sind jedoch ein wenig in Vergessenheit geraten, nachdem ECDSA 2005 zum Standard wurde. Auch Bitcoin verwendet ECDSA-Signaturen, die auf einer bestimmten elliptischen Kurve basieren.
Seit 2008 ist jedoch das Patent auf Schnorrs System abgelaufen, und seit 2011 ist die Idee im Raum, eine bestimmte Art der elliptischen Kurven Signatur mit dem System von Schnorr zu verbinden. “Aber es gibt noch keinen Standard. Schnorr ist mehr oder weniger nur eine Methode”, so Wuille.
Während die konkrete Ausgestaltung der Methode Schnorr noch offen ist, liegen ihre Vorteile auf der Hand: Schnorr-Signaturen sind sicher, nicht-malleable, schneller und nativ multisig fähig. Mit Schnorr-Signaturen ist es möglich, das bisherige, doch recht umständliche Verfahren von MultiSig zu vereinfachen, und, vielleicht am wichtigsten: man kann Schnorr-Signaturen aggregieren, so dass eine Transaktion nicht mehr eine Signatur je Input braucht, sondern nur noch eine insgesamt. Das würde, so Wuille, eine Platzersparnis von 20 Prozent mit sich bringen und einen Anreiz darstellen, um CoinJoin zu benutzen (da aggregierte inputs, wie bei CoinJoin verwendet, Platz und damit Gebühren sparen).
So interessant Schnorr Signaturen sind: Pieter Wuilles Präsentation erklärt auch, wieviel noch zu tun ist, bevor sie zu einem Teil von Bitcoin werden können.
Weniger UTXO mit besserer Coin Selection
Greifbarer war hingegen das Thema einer Präsentation zum UTXO-Set und der Coin Selection. Mark Erhardt vom Karlsruhe Institute of Technology hat die Ergebnisse seiner Simulation verschiedener Methoden der Coin Selection vorgestellt.
Ich fürchte, ich muss ein Stückchen ausholen, um die beiden Begriffe zusammenzubringen. Eine Bitcoin-Transaktion – hier ein beliebiges Beispiel – besteht aus inputs, die zu outputs werden. Man kann sich inputs wie Münzen vorstellen: erst liegen sie in meiner Wallet, dann versende ich sie. Man kann sie nur als Ganzes versenden, was zuviel ist, geht als Wechselgeld (als output) zurück in die eigene Wallet.
Die Aufgabe der Wallet ist es nun, die outputs zu verwalten, die man empfangen hat, und aus diesen neue Transaktionen zu bilden. Stellen Sie sich vor, Sie haben in Ihrer Wallet 10 noch nicht ausgegebene outputs a 0,1 Bitcoin, 2 outputs a 0,5 Bitcoin und 1 output von 0,8 Bitcoin. Wenn Sie nun 1 Bitcoin senden wollen – wie setzen Sie die Transaktion zusammen? Sie haben unter anderem folgende Möglichkeiten:
- 10 x 0,1
- 5 x 0,1 + 1 x 0,5
- 2 x 0,5
- 1 x 0,8 + 2 x 0,1
Welche Variante davon ist nun besser? Die Entscheidung ist aus einer Reihe von Gründen alles andere als trivial:
- Gebühren: Sie müssen jeden Input signieren, woraus folgt, dass eine Transaktion desto mehr Signaturen hat, je mehr inputs sie enthält und damit mit der steigenden Anzahl von inputs mehr Platz auf der Blockchain braucht und mehr Gebühren kostet. Die sparsamste Variante wäre es also, möglichst wenige inputs zu verwenden und 2 x 0,5 Bitcoin zu versenden.
- UTXO: Alle Inputs und Outputs einer Transaktion sind Teil des Unspent Output Set (UTXO-Set). Ein Coin der in einer Wallet liegt, ist ein Unspent Output. In einer Transaktion wird er zum Input und in andere Outputs transformiert. Das UTXO-Set stellt den minimalen Zustand des Systems dar. Man kann eine Blockchain durch Prunen kleiner machen, aber kleiner als das UTXO-Set geht nicht. Da das UTXO-set kontinuierlich wächst, könnte es zum Hindernis für die Skalierbarkeit von Bitcoin werden. Eine nachhaltige Coin Selection bedeutet, möglichst viele inputs zu verwenden. In unserem Szenario bedeutet dies, 10 x 0,1 Bitcoin zu senden.
- Drittens hat die Wahl der Inputs einer Transaktion schwerwiegende Folgen für die Privatsphäre des Users. Für den User dürfte dies am wichtigsten sein. Um sie ging es aber in der Präsentation von Mark Erhardt nicht.
Der Informatik-Student, der derzeit seine Master-Arbeit schreibt, hat sich in seinen Simulationen bisher damit beschäftigt, wie die Selektion der Inputs das UTXO-Set und die Höhe der Gebühren beeinflusst. Dafür hat Erhard einen großen Datensatz von Transaktionen eingespielt und verschiedene gängige Varianten der Coin Selection durchsimuliert. So verwenden manche Wallets die Methode FIFO – first in, first out – während andere die inputs nach bestimmten Maßstäben der Priorität sortieren (nach Größe und Alter), und Core schließlich einen eigenen, nicht ganz unkomplexen Algorithmus benutzt.
Es liegt auf der Hand, dass geringe Gebühren und geringes UTXO-set zwei widersprüchliche Ziele sind. Wer mehr outputs verbraucht, reduziert zwar das UTXO-Set, braucht aber auch mehr Platz und bezahlt dementsprechend mehr Gebühren. Allerdings bedeutet dies nicht, dass es beliebig ist, wie man eine Transaktion bildet. Wie Mark Erhardts Simulationen zeigen, dass verschiedene Coin Selection Algorithmen verschiedene Folgen haben.
So hat der Priority-Algorithmus sehr viele Unspent Outputs erzeugt (weil er große inputs bevorzugt und diese Stücke bricht), FIFO und Core das UTXO-Set relativ gering halten. Genauer betrachtet gibt es zwischen FIFO und Core noch einige Unterschiede, ebenso wie zwischen Core-Variationen wie von Luke-JR.
Mark Erhardts Studien sind noch nicht abgeschlossen. Er möchte noch mehr Datensätze durchspielen, mehr Modelle testen und den Faktor Privacy berücksichtigen. Aber bereits jetzt zeigen seine Analysen, dass die Wahl der richtigen Coin Selection einen großen Unterschied macht und dass es sich lohnt, an ihr zu arbeiten, um die Blockchain nachhaltig zu skalieren.
Danke
Was ich bei der Coinselection der Wallets nervt ist, dass ich öfters ein Wechselgeld von einen kleine Betrag erhalte. Diese Krümel müsste ich manuell auswählen und wieder zusammenführen. Dann habe ich aber ein TX mit 1 KB, die ca. 0,6 mBTC an fees kostet, was sich nicht lohnt. Ich schätze mal das eine große Anzahl an UXTO aus Krümelbeträgen besteht?
Wenn ich mein Pseudo-Wallet bei Bitcoin.de benutzte, treten diese Krümelbeträge nicht auf, weil Bitcoin.de besser Coins selektieren kann und mehrere Überweisungen in eine zusammenfasst. Was ich gerne hätte, wäre ein richtiges Wallet, welches mir zumindest anzeigt, welcher Restbetrag als Wechselgeld anfallen wird und mir die Wahl lässt, diesen Restbetrag mit zu den fees zu addieren. Dann entfällt die Wechselgeldorgie.
Ja, das geht mir auch so. Bei Electrum kann man mit ein wenig herumgeschiebe (rechtsklick + Adresse blockieren) zumindest bestimmen, welche Inputs man nicht benutzt. Aber an sich ist genau das der Grund, weshalb ich weiterhin am liebsten den Bitcoin Client mit Coin Controll benutze.
Das System von Bitcoin.de, Transaktionen zu verschmelzen, ist in Sachen Privacy + Scalability natürlich vorbildlich und ragt unter allen Handelsplätzen hervor 🙂
Sorry, edit: Auf Electrum kann man auch einfach eine Adresse rechtsklicken und dann anwählen “Send from this address”.