Website-Icon BitcoinBlog.de – das Blog für Bitcoin und andere virtuelle Währungen

Miniscript: Eine neue Programmiersprache für Bitcoin Smart Contracts

Pieter Wuille von Blockstream hat kürzlich Miniscript vorgestellt: Eine Sprache, die es einfacher machen soll, Scripte für Bitcoin-Transaktionen zu schreiben und zu verstehen.

Viele, die sich nur oberflächlich mit Bitcoin beschäftigen, halten die Kryptowährung für eine Art Automaten, der nichts anderes kann, als stupide eine Transaktion von dem einen zu dem anderen zu schicken. Tatsächlich aber steckt in Bitcoin eine Skriptsprache, „Script“, die Satoshi Nakamoto auf Basis von Forth eigens für Bitcoin entwickelt hat. Jede Transaktion enhält Befehle in dieser Skriptsprache.

Im einfachsten Fall definiert das Skript, das ein Bitcoin nur ausgegeben werden kann, wenn die Transaktion eine Signatur von der Adresse, an die er gesendet wurde, enthält. Das wäre die ganz normale Transaktion. Aber es gibt noch viele weitere Möglichkeiten. Bitcoin wird nicht umsonst „programmierbares Geld“ genannt.

Das Gebiet der Bitcoin-Skripte ist allerdings noch weitgehend unerschlossen. Während bei Ethereum munter mit den komplexesten und buntesten Scripten experimentiert wird, passiert bei Bitcoin außer Multisig-Adressen und Lightning-Channels nicht viel. Mit ein Grund dafür könnte sein, dass Ethereum mit Solidity eine Programmiersprache hat, die die Scripte auf relativ bequeme Weise anspricht und durch ihre Nähe zu JavaScript vielen Entwicklern leicht vertraut wird. Bei Bitcoin dagegen hämmert man die Skripte über die Op_Codes eher umständlich und undurchsichtig in den Rohcode einer Transaktion ein.

Möglicherweise wird das nun veröffentlichte Miniscript die Situation ändern. Pieter Wuille, Blockstream-Mitgründer und einer der renommiertesten Bitcoin-Entwickler überhaupt, hat die neue Sprache für Bitcoin-Scripte vor kurzem in der Mailing-Liste der Bitcoin-Entwickler sowie auf seiner Webseite präsentiert. Miniscript sei „eine Sprache, um (ein Subset von) Bitcoin-Scripten auf eine strukturiere Weise zu schreiben, was es ermöglicht, sie zu analysieren, zu komponieren, genetisch zu signieren und mehr.“

Auf seiner Seite erklärt Wuille auch genauer, welche Mängel des eigentlichen Scripts von Bitcoin ihn bewogen haben, Miniscript zu entwickeln. So sei die Funktionalität von Script zwar beschränkt, doch viele Dinge, die mit anderen Sprachen selbstverständlich seien, seien damit „nicht trivial“. Als Beispiel nennt Wuille nennt vor Analyse-Probleme – welches Script ist effizientesten, um eine bestimmte Aufgabe zu erfüllen? Wie kann man die Kosten für die Ausführung vorausberechnen? Welche Ausgabebedingungen werden verboten? – aber auch der Komposition, beispielsweise wenn man einen Multisig-Vertrag mit 4 Teilnehmern hat, aber die Coins des einen Teilnehmers in einem anderen Smart Contract verwoben sind. Solche Fälle sind mit Script wohl unheimlich schwer konstruierbar.

„Miniscript fungiert als eine Repäsentation der Scripte, die solche Operationen möglich macht,“ schreibt Wuille. „Es hat eine Struktur, die Kompositionen erlaubt, und macht es sehr einfach, statische Analysen für verschiedene Eigenschaften durchzuführen.“ Miniscript ist also ein Werkzeug, um Scripte besser zu komponieren und zu analysieren. Es ist eher Oberfläche für den tatsächlichen Code; um ausgeführt zu werden, wird ein Miniscript in ein Bitcoin-Script kompiliert.

Ein Beispiel: Das Script, um die Signatur einer Transaktion zu prüfen und diese zu verwerfen, wenn die Signatur nicht gültig ist, sieht in Bitcoin so aus: OP_CHECKSIGVERIFY OP_CHECKSIG. Pieter Wuilles Miniscript repräsentiert es dagegen so: and_v(vc:pk(K),c:pk(A)). Das sieht jetzt nicht zwingend unkomplizierter aus, ist aber kürzer. Insbesondere bei komplexeren Scripten soll Miniscript helfen, diese für Menschen besser les- und bearbeitbar zu machen.

Laut Wuille kann man mit Miniscript eine Menge interessante Dinge tun. Man kann etwa komplexe Multisig-Verträge bilden, bei denen für die einzelnen Parteien bestimmte Unterbedingungen definiert werden. Die kollektive Verwahrung von Geld kann so viel feiner und detailreicher gestaltet werden. Darüber hinaus wird es transparenter, welche Ressourcen – etwa für Gebühren – das Ausgeben eines durch ein spezielles Scriptes gebundenen Coins verlangt.

Die Idee von Wuille ist dabei nicht neu. Ethereum hat mit seiner High-Level-Sprache Solidity die Smart-Contract-Entwickler im Sturm gewonnen und wurde zum Inbegriff der programmierbaren Blockchain. Solidity ist dabei eine eigenes für Ethereum entwickelte Programmiersprache, die an JavaScript erinnert und daher Webentwicklern schnell vertraut ist. Ähnlich hat auch ein Entwickler von Bitcoin Cash vor einigen Monaten mit Cashscript eine auf der JavaScript-Syntax basierende Skriptsprache veröffentlicht, und für Bitcoin SV wurde erst vor wenigen Tagen eine sCrypt genannte Sprache angekündigt, die demnächst in den Test gehen soll. Auch sie liegt nahe an JavaScript.

Die Parallelität der Entwicklung ist erstaunlich. Für gut 10,5 Jahre hat Bitcoin auf dem Gebiet der Skripte beinah stagniert. Nun gibt es plötzlich auf drei Inkarnationen von Bitcoin (BTC, BCH, BSV) Innovationen, die sämtliche versuchen, die Bitcoin-Skripte aus ihrem starren Korsett zu lösen und in eine Form zu bringen, in der User und Entwickler sie besser schreiben, lesen, bearbeiten und analysieren können.

Im Vergleich mit Cashscript und sCrypt scheint Blockstreams Miniscript am reifsten zu sein. Wuille und seine Kollegen Andrew Poelstra und Sanket Sanjalkar arbeiten bereits sehr mehr als einem Jahr an dem Projekt. Die derzeitige Implementierung sei noch längst nicht vollständig, „aber nachdem sie breite, randomisierte Tests bestanden hat, sind wir zuversichtlich, dass das Design der Sprache und die assozierten Zeugen [Signaturen] kompatibel mit den existierenden Konsens- und Standardregeln sind,“ schreibt Wuille in der Mailinglist. Anders gesagt: Für Standardanwendungen ist Miniscript bereits produktionsreif.

Es gibt bereits zwei Implementierungen, in Rust und in C++. Die beiden Sprachen glänzen vor allem durch ihre Geschwindigkeit und werden üblicherweise eher für lokal laufende Software eingesetzt. Das könnten in diesem Fall etwa Wallets sein. Die ebenfalls von Blockstream entwickelte Wallet Green dürfte ein guter Kandidat dafür sein, Miniscript als erstes an den User heranzubringen. Eher ungewöhnlich – bzw. sperrig – sind die beiden Sprachen dagegen in der Webentwicklung. Diese dürften die JavaScript-nahen Projekte wie Cashscript und sCrypt besser ansprechen. Sollte Miniscript ein Erfolg werden, wird es jedoch nur eine Frage der Zeit sein, bis es auch eine Implementierung in JavaScript bekommt. Und in PHP. Und in Perl, Ruby, Python und so weiter.

Die mobile Version verlassen