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.

Über Christoph Bergmann (1629 Beiträge)
Das Bitcoinblog wird von Bitcoin.de gesponsort, ist inhaltlich aber unabhängig und gibt die Meinung des Redakteurs Christoph Bergmann wieder. Christoph hat vor kurzem ein Buch geschrieben: Bitcoin: Die verrückte Geschichte vom Aufstieg eines neuen Geldes. Das Buch stellt Bitcoin in seiner ganzen Pracht dar. Ihr könnt es direkt auf der Webseite Bitcoin-Buch.org bestellen - natürlich auch mit Bitcoin - oder auch per Amazon. Natürlich freuen wir uns auch über Spenden in Bitcoin, Bitcoin Cash oder Bitcoin SV an die folgende Adresse: 1BergmanNpFqZwALMRe8GHJqGhtEFD3xMw. Wer will, kann uns auch Hier mit Lightning spenden. Tipps für Stories sind an christoph.bergmann@mailbox.org immer erwünscht. Wer dies privat machen möchte, sollte meinen PGP-Schlüssel verwenden.

6 Kommentare zu Miniscript: Eine neue Programmiersprache für Bitcoin Smart Contracts

  1. Script ist wirklich die Pest, aber was ist denn nur aus Simplicity geworden?

  2. Alles schön und gut, Miniscript sieht auch interessant aus, aber wer sollte angesichts der unvorhersehbaren Fees (insbesondere bei einem nächsten Bull-Run) darauf entwickeln? Das Problem sieht man ja schon auf der Ethereum Blockchain…

    Ich bleibe bei meiner Meinung, dass es nichts bringt, tolle Dinge auf einem kaputten / nicht skalierbaren Protokoll zu entwickeln, wenn man dieses selbst nicht mehr anrühren will. Man “optimiert” hier auf ein 33k Modem und baut immer noch mehr Applikationen darauf auf, obwohl DSL schon Standard ist, wird aber auf 33k gedrosselt. QoS Priorisierung in Form von unvorhersehbaren Fees inklusive, nein Danke. Wer wirft den ersten Stein? *Duckundweg*

  3. Pearl -> Perl;

  4. Im Prinzip hinkt der Vergleich mit dem Modem gewaltig.

    Alleine der Satzteil “obwohl DSL schon Standard ist” offenbart die Fehleinschätzung.

    Suggeriert wird hier, dass Bitcoin (das 33k) Modem bereits durch einen neuen Standard (welcher Altcoin auch immer hier gemeint sein soll, das bleibt im Dunkeln) ersetzt worden wäre. Fakt ist aber, dass die Bitcoin Dominanz über die Altcoins ständig steigt. Wenn andere sich durchsetzen würden ginge das nur bei einer gegenteiligen Bewegung.

    Bitcoin ist der Standard und vor allem bleibt er es. Von dem riesigen unübersichtlichen Altcoinmarkt werden 95% der Coins verschwinden. Es werden wohl Währungen wie Ethereum, Stellar, Ripple, IOTA, Monero und ein paar wenige andere bleiben. Viele können Nischen besetzen. Bitcoin wird meiner Ansicht nach auch längerfristig das bleiben was er ist. Daher macht es durchaus Sinn sich mit den Möglichkeiten zu beschäftigen.

    ich selbst finde aber die Variante durch eine 2nd Layer Lösung eine Ethereum Virtual Machine auf Bitcoin zu betreiben viel interessanter. Mit Rootstock gibt es hier ein richtig gutes Projekt. Gesichert wird es durch die Bitcoin Miner selbst, daher ist es gleichzeitig die sicherste 2nd Layer Lösung und die Bitcoins die auf der jeweiligen Blockchain reserviert und freigegeben werden müssen um sie in Rootstock als Smart Bitcoin zu verwenden, werden über Script gesteuert.

    Die EVM ist 100% kompatibel zu Ethereum und man könnte bestehende Smart Contracts problemlos übernehmen.

    Bitcoin mit Sidechains wie Lightning und Rootstock ist alles andere als überholt!

    MfG
    Martin Janda

    • Du hast Recht, ich will polarisieren. Aber damit auch zum Denken anregen, in der Hoffnung dass mir das gelingt…

      Bitcoin hat in meinen Augen nur noch den Vorteil des Netzwerkeffekts des initialen Projekts, der z.B. im LN schon sehr abgeschwächt ist und vergleichbar mit einem Altcoin ist. Ich liebe Bitcoin an sich und würde mir wünschen, dass es eine Weiterentwicklung gibt, zumal es ungleich zu Litecoin unzählige fähige Entwickler gibt. Das Problem ist eher der Kult oder gar Religion, die entstanden ist und dass man z.B. auf Twitter oder Reddit in /r/bitcoin gebannt wird, wenn man tiefergehende technische Fragen abseits des Moon-Geblubber postet ist katastrophal. “Ob” Bitcoin überrannt werden wird ist eigentlich keine Frage, die Frage ist eher “wann”. In der Bewertung sollte man auch nicht nur auf den Market Cap schauen, der mittlerweile von etlichen Seiten aus manipuliert wird…

      Dass 95% (oder sogar mehr) der Coins verschwinden werden, ist auch meine Hoffnung, da sie nichts zum Ökosystem beisteuern.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s