In Bitcoin sieht man gerne den sanften Riesen: Eine Marktkapitalisierung deutlich über 50 Prozent und eine deutlich geringere Volatilität als Krypto-Assets – Stable Coins ausgenommen lassen Bitcoin selbst im jüngsten Kursabfall souverän aussehen. Eine Schattenseite hat diese Position jedoch auch: „Bei Bitcoin mahlen die Mühlen langsamer“ – so meinen viele. Und tatsächlich: sieht man sich die Developer-Aktivität in den Githubs anderer Kryptowährungen an, scheint Bitcoin hinterherzuhinken. Litecoin war schneller bezüglich Segregated Witness, die angeblich wahre Vision Satoshis kann nun Blöcke im Gigabyte-Format vorweisen und Ethereums Smart-Contract-Anwendungen häufen sich auch mit jedem Tag. Sicher, im Bereich vom Lightning-Netzwerk tut sich vieles, aber wie steht es mit der Entwicklung von Bitcoins Kern?
Zum einen dürfen Anleger bei Bitcoin nie vergessen, dass dessen augenscheinlich fehlende Entwicklungseifer kein Fehler, sondern eine gewollte Eigenschaft ist. Viel wichtiger ist jedoch, dass viele Entwicklungen bisher am einfachen Nutzer vorbeigehen beziehungsweise ausgiebig getestet werden. Vor über einem Jahr berichtete BTC-ECHO über Taproot und Graftroot in diesem Zusammenhang. Neben Taproot geht nun ein zweiter Vorschlag auf das Konto der Bitcoin Core Developer Peter Wuille, Andrew Poelstra und Sanket Kanjalkar: Jüngst schlug er eine Erweiterung von Bitcoins Skriptsprache vor. Passend hört diese auf den Namen Miniscript.
Miniscript: Komplexe Transaktionen lesbar erfassen
Mit dem Rivalen Ethereum im Rückenwind haben viele hinter Miniscript schnell ein Pendant zu Ethereums Smart Contracts gesehen. Dieser Ansatz ist jedoch falsch und widerspricht dem, was das Bitcoin Core Team erreichen möchte. Bitcoin selbst soll in erster Linie sicher sein. Turing-vollständige Programmiersprachen, wie sie beispielsweise in Ethereums intelligenten Verträgen vorkommen, ermöglichen vieles, können aber sehr unsicher sein. Der DAO-Exploit von 2016 liefert hier ein Menetekel. Auch wenn Rootstock Smart Contracts auf Bitcoin-Basis ermöglichen soll, liegt im engen Bitcoin-Ökosystem der Fokus auf Sicherheit.
Statt um Smart Contracts geht es Miniscript in erster Linie um eines: Lesbarkeit. Bitcoins Skriptsprache ist nicht gerade für eine einfache Lesbarkeit bekannt. Das ist insbesondere für Multi-Signature-Transaktionen sinnvoll.
Gerade die Multi-Signature-Transaktionen bieten ein Potenzial, welches fast an Smart Contracts erinnert. Multi-Signature-Transaktionen erschöpfen sich nicht in Transaktionen, die von mehreren Nutzern genehmigt werden müssen. Prinzipiell können Verknüpfungen mit anderen Multi Signature Wallets oder mit zeitlichen Bedingungen versehen werden. Problem ist jedoch, dass das Implementieren derartig komplexer Transaktionsbedingungen in Bitcoins ureigener Sprache Script absolut nicht trivial ist. Mithilfe von Miniscript sind derartige Bedingungen jedoch deutlich lesbarer zu schreiben.
Multi-Signature-Transaktionen in Action: Wie sie in Bitcoin Script und Miniscript aussehen
Ein Beispiel: Sagen wir Alice, Bob und Carol möchten einen gemeinsamen Vertrag aufsetzen. Eine Multi Signature Wallet soll so ausgelegt sein, dass eine von ihr ausgehende Transaktion die Zustimmung von Alice, Bob und Carol benötigt. Nun ist jedoch Carol viel in der Welt unterwegs und häufig nicht erreichbar. Sie einigen sich deshalb darauf, dass die Zustimmung von Carols Ehemann Dave nach einer gewissen Wartezeit als Ersatz für die Zustimmung von Carol genutzt werden kann.
Um die Bitcoins in der gemeinsamen Multi Signature Wallet zu verschieben, muss also die folgende Bedingung erfüllt sein: Alice UND Bob müssen zustimmen. Außerdem muss entweder Carol der Transaktion ODER Dave nach einem Ablauf von einer Woche zustimmen.
In Bitcoin Script ausgedrückt würde das Ganze so aussehen:
<Alice> OP_CHECKSIGVERIFY <Carol> OP_CHECKSIG OP_NOTIF
<Dave> OP_CHECKSIGVERIFY <9d04> OP_CHECKSEQUENCEVERIFY OP_VERIFY
OP_ENDIF
<Bob> OP_CHECKSIG
Dabei stehen die Namen in eckigen Klammern für die entsprechenden Signaturen und <9d04> für 1.181, also die Anzahl der Blöcke, die in einer Woche zu erwarten sind. Doch auch mit diesen Erklärungen bleibt es dabei: Bitcoin Script ist nicht gerade einfach. Einen Schritt in Richtung Lesbarkeit leistet dabei Miniscript. Hier sieht die obige Vereinbarung zwischen Alice und ihren Freunden deutlich lesbarer aus:
and_v(vc:pk(Alice),and_v(or_c(c:pk(Carol),and_v(vc:pk(Dave),v:older(1181))),c:pk(Bob)))
Dabei steht pk(Alice) für den Public Key von Alice, von dem das Skript eine Signierung erwartet. Der Code erwartet also von Alice UND Bob (beziehungsweise deren Public Keys), dass diese mit ihrem Private Keys die Transaktion signieren. Außerdem wird von Carol ODER Dave eine Signatur durch ihre Private Keys erwartet. Dabei kann jedoch Dave nur dann signieren, wenn 1.181 Blöcke an Zeit im Bitcoin-System vergangen sind.
Eine weitere Neuerung um Miniscript ist, dass selbst diese schon deutlich einfachere Form noch lesbarer werden kann. Miniscript kann nämlich aus einer sogenannten Policy Language generiert werden. Die Policy Language für den obigen Code schaut dann wie folgt aus:
and(pk(Alice),and(pk(Bob),or(pk(Carol),and(pk(Dave),older(1181)))))
Ein Schritt für einfache Weiterentwicklung von Bitcoin-Wallets
Aus der Lesbarkeit ergeben sich jedoch weitere Möglichkeiten. Insbesondere für Wallet-Entwickler kann Miniscript ein Schritt zu einer Erweiterbarkeit und Weiterentwicklung ihrer Produkte sein. Statt dass ein Bitcoin Script bezüglich einer neuen Multi-Signature-Transaktion komplett umgeschrieben werden muss, reicht es aus, im Miniscript eine kleine Erweiterung zu schreiben.
Ebenso sollen mithilfe von Miniscript anstehende Neuerungen im Bitcoin-Ökosystem wie Taproot leicht implementierbar sein. Für Wallet-Entwickler ist es so ein leichtes, ihre elektronischen Geldbörsen schnell auf den neuesten Stand der Entwicklungen zu bringen. Da Miniscript einfach lesbar ist, ist es zudem möglich, dass bald einfache Wallet-Nutzer schnell ihre eigenen Scripts schreiben können. Dem Motto Bitcoins, be your own bank, würde Bitcoin so deutlich gerechter werden.
Auf der Webseite von Miniscript können Interessierte schon mal etwas mit der Policy Language und Script spielen. Die technisch wirklich Hartgesottenen können mit Implementationen von Miniscript in C++ oder Rust experimentieren.