Suche
Close this search box.
Trends Cryptos

Wie programmiert man Smart Contracts mit Ethereum und Webassembly?

Ethereum ist die Grundlage für eine der beliebtesten Kryptowährungen – und doch ist es viel mehr als das. Dank Algorithmen kann die Kryptowährung völlig selbstständig verwaltet werden. Doch wie funktionieren „Smart Contracts“ und wie weit sind wir auf dem Weg dorthin?

Wie funktionieren Smart Contracts in Ethereum?
Um das Prinzip der intelligenten Verträge in Ethereum zu verstehen, ist zunächst ein kleiner Ausflug in die Welt der Programmiersprachen notwendig. Die gängigen Programmiersprachen werden im Wesentlichen in zwei Gruppen unterteilt: interpretierte und kompilierte Sprachen. In der ersten Gruppe werden Programme in einer Hochsprache geschrieben, die dann von einem Interpreter ausgeführt werden. Zwei beliebte Beispiele sind Python und JavaScript. Interpretierte Sprachen sind in vielen Anwendungsbereichen (z. B. im Web) üblich, da man mit ihnen sofort loslegen kann. Sie sind außerdem sehr universell und können auf verschiedenen Plattformen eingesetzt werden, ohne dass zusätzliche Werkzeuge benötigt werden.

Im Gegensatz dazu gibt es kompilierte Sprachen, bei denen ein Compiler den Programmtext zunächst in eine andere Sprache – oft einen binären Maschinencode – umwandelt. Dieser binäre Code ist plattformabhängig und wird direkt auf einem Prozessor ausgeführt. Der Compiler kann (und muss) einen angepassten Code für den Befehlssatz des Prozessors erzeugen, z. B. für ARM- oder Intel-kompatible CPUs. Bekannte Vertreter dieses Typs sind C und Rust.

Die Realität ist jedoch wie immer komplexer, als diese einfachen Kategorien vermuten lassen. Seit einiger Zeit gibt es auch Mischformen wie Java. Der Java-Compiler übersetzt den Java-Code nämlich nicht direkt in „echten“ Maschinencode, sondern in ein spezielles Zwischenformat. Dieses Zwischenformat wiederum wird dann von einem Interpreter – der Java Virtual Machine – auf der konkreten Prozessorarchitektur ausgeführt.

Auch die intelligenten Verträge von Ethereum funktionieren auf ähnliche Weise. Alle Knoten, die in Ethereum Transaktionen validieren und neues Geld schöpfen, enthalten eine Instanz der Ethereum Virtual Machine (EVM). Das Yellow Paper, die technische Spezifikation von Ethereum, definiert detailliert, welche Anweisungen die EVM unterstützen – und wie sie ausgeführt werden müssen.

Es handelt sich um eine proprietäre Entwicklung, die viele Besonderheiten aufweist:

Eine Interaktion mit der Außenwelt ist nicht möglich: Alle algorithmischen Entscheidungen müssen sich aus der Blockchain und ihren Transaktionen ergeben.
Die Arithmetik basiert auf 256-Bit-Werten, um den Umgang mit größeren Adressen und Beträgen zu erleichtern.
Spezielle Operationen wie Hash-Funktionen werden eingebaut, um die Leistung zu steigern.
Allen Anweisungen wird eine Kostenfunktion (Treibstoff) zugewiesen, die ungefähr der benötigten Ausführungszeit und der Menge des benötigten Speichers entspricht. Im Englischen wird häufig der Begriff metering verwendet.
Programmierung auf dem EVM
Wie beim Java-Ökosystem gibt es verschiedene Programmiersprachen, für die EVM-Compiler verfügbar sind. Die gängigste Sprache ist Solidity, die oberflächlich (syntaktisch) an JavaScript erinnert. Ende 2020 listet die Ethereum-Dokumentation zwei weitere Sprachen auf: Vyper, das auf Python basiert, und Yul Plus, eine völlig unabhängige Entwicklung.

Was all diese Sprachen gemeinsam haben, ist, dass sie domänenspezifisch sind, da sie im Gegensatz zu vielseitigen Sprachen eine Nische mit bestimmten Eigenschaften und insbesondere einer speziellen Ausführungsmaschine besetzen: der EVM. Natürlich sind solche domänenspezifischen Sprachen (DSL) grundsätzlich eine gute Idee, um die Komplexität von Anwendungen zu reduzieren.

Im Fall der EVM scheint dies jedoch wenig Sinn zu machen. Immerhin kann sie – unabhängig von den fehlenden Interaktionsmöglichkeiten mit der Welt außerhalb der Blockchain – beliebige Algorithmen ausführen, sie ist also (vereinfacht gesagt) Turing-vollständig.

Warum sollte man nicht eine bestehende Sprache und Ausführungsumgebung verwenden?
Dann müssten zwar notfalls Funktionen gestrichen werden, aber man könnte sich auf eine längere Erfahrung, stabilere Werkzeuge und – was viel wichtiger ist – eine breitere Basis von Programmierern stützen. Es ist nämlich allgemein bekannt, dass die Popularität einer Programmiersprache heute nicht mehr nur dadurch bestimmt wird, ob man in ihr besonders knapp, typensicher oder dynamisch programmieren kann, sondern auch dadurch, wie leicht man auf die vielen vorhandenen Bibliotheken und Pakete zugreifen kann. Besonders deutlich wird dieser Epochenwechsel an JavaScript, das oft wegen seiner groben Semantik kritisiert wird, aber spätestens seit dem millionsten NPM-Paket als beliebteste Programmiersprache angesehen werden muss.

Webassembly, eine universelle Zwischensprache
Die Leute hinter der Ethereum-Spezifikation sind zu dem Schluss gekommen, dass einige Probleme gelöst werden können, indem man die individuelle Entwicklung zugunsten einer universellen Sprache aufgibt. Wie praktisch, dass im Web eine Entwicklung im Gange ist, die eine Alternative zum großen Hund JavaScript etablieren soll : Webassembly (WASM). Dabei handelt es sich sowohl um eine universelle Zwischensprache als auch um ein Binärformat, verbunden mit einer Spezifikation für die Interpreter. Wie der Name schon sagt, wurde dieser offene Standard ursprünglich für das Web entwickelt. Inzwischen wurden auch andere Anwendungsbereiche (z. B. Anwendungen für Smartphones) in Betracht gezogen.

Die Entwicklung von WASM wird von Branchenriesen wie Microsoft, Google und Apple vorangetrieben. Die Sprache zeichnet sich dadurch aus, dass sie von Anfang an auf Portabilität ausgelegt wurde. Dies ist daran erkennbar, dass viele bestehende Programmiersprachen wie Rust, C++ oder Go bereits für die Webassemblierung kompilieren können.

Sommaire

Sois au courant des dernières actus !

Inscris-toi à notre newsletter pour recevoir toute l’actu crypto directement dans ta boîte mail

Envie d’écrire un article ?

Rédigez votre article et soumettez-le à l’équipe coinaute. On prendra le temps de le lire et peut-être même de le publier !

Articles similaires