- Teil 1: Verträge im Äther (dieser Artikel)
- Teil 2: Geld im Äther
- Teil 3: Den Äther programmieren
- Teil 4: Benutzerfreundlicher Äther
Blockchains werden oft mit Kryptowährungen gleichgesetzt, aber die Technologie kann mehr als Geld verwalten. „Smart Contracts“ erlauben die Blockchain als Computer zu benutzen und ermöglichen zum Beispiel virtuelle Organisationen oder Non-Fungible-Tokens (NFT). Ethereum ist der Vorreiter bei diesen Anwendungen.
Der Weltcomputer braucht Geld. Mit „Weltcomputer“ ist Ethereum gemeint, aber um diesen Satz zu verstehen, fängt man besser beim Geld an: Ethereum soll – genau wie Bitcoin und zahlreiche andere Kryptowährungen – Geld so im Internet verwalten, dass jeder mitmachen darf, aber keine Bank und kein Staat die Transaktionen und die Währungsentwicklung überwacht. Wie funktioniert das, ohne dass Chaos ausbricht?
Traditionellerweise werden Geldbestände über Kassenbücher verwaltet. Dieses Konzept hat eine lange Geschichte hinter sich; in Europa benutzte man bereits im frühen Mittelalter Kerbhölzer, um unter anderem Schulden zu dokumentieren. Die fundamentale Idee der antiken wie modernen Kontoführung ist schnell erklärt: Man zeichnet nicht die Kontostände auf, sondern die Transaktionen zwischen verschiedenen Konten und Personen. Wenn das Kassenbuch vollständig und manipulationssicher ist, dann weiß man jederzeit genau, wer wie viel Geld besitzt oder schuldet.
Die Blockchain einer Kryptowährung ist nichts anderes als ein solches Kassenbuch (Englisch: „ledger“), welches global verteilt ist: Jeder Teilnehmer hat eine Kopie des Buchs. Man nennt Blockchains deswegen auch „distributed ledgers“.
Block, Block, Blockchain
Um Eintragungen in diesem Kassenbuch vorzunehmen, fasst man mehrere Transaktionen – bei Ethereum derzeit knapp 200 – in einem „Block“ zusammen. Notiert werden die Transaktionen in der jeweiligen Kryptowährung, im Fall von Ethereum sind das „Ether“ (ETH) oder der ihrer Untereinheiten. Die kleinste davon ist das Wei, es entspricht 10–18 ETH. Zwar kann jeder eine Transaktion in das Netzwerk einbringen, aber das alleine macht die Transaktion noch nicht gültig. Für die Gültigkeit gibt es verschiedene Kriterien, zum Beispiel darf man Geld nicht zweimal ausgeben („Double Spending“).
Transaktionen müssen also validiert werden, um gültig zu sein. Das macht jeder teilnehmende Ethereum-Knoten, indem er die Transaktionen eines Blocks mit den vorhergehenden Blöcken vergleicht. Ist eine Transaktion ungültig – etwa weil Geld ausgegeben wird, das in früheren Blöcken bereits ausgegeben wurde –, wird sie zurückgewiesen. Diese Prüfung geschieht auf der ganzen Welt gleichzeitig auf zahlreichen Knoten.
Haben sich genügend Transaktionen für einen neuen Block angesammelt, beginnt ein Wettrennen: An der Blockchain teilnehmende Knoten versuchen, eine Zufallszahl – die sogenannte Nonce – zu erwürfeln, sodass der kombinierte Hash aus den Transaktionsdaten, einer Referenz auf den aktuellen Block und der Nonce einen bestimmten Schwellwert – die Difficulty – unterschreitet. Diese Suche bezeichnet man als „Schürfen“ oder „Mining“ (siehe Kasten). Wer zuerst eine passende Zahl findet, hat einen Block geschürft und erhält eine Belohnung in Ether. Das Ethereum-Netzwerk steuert den Schwellwert von Block zu Block so nach, dass es im Durchschnitt 15 Sekunden dauert, bis irgendjemand auf der Welt eine geeignete Zufallszahl findet.
Öffentliche Kryptowährungen – allen voran Bitcoin – stehen wegen ihres exorbitanten Energieverbrauchs in der Kritik. Der rührt vornehmlich vom Mining: Für jeden neuen Block müssen zahlreiche Zufallswerte durchprobiert werden. An sich ist diese Suche ein sinnloser, aber erzwungener Ressourcenverbrauch. Dieser „Proof of Work“ (PoW) schützt die Blockchain, indem er Manipulationen aufwendig und unrentabel macht.
Allerdings verursachen große Blockchains dadurch einen enormen Stromverbrauch, bei Bitcoin in etwa den eines kleinen Landes – je nach Berechnungsmethode. Nicht nur vor dem Hintergrund des Klimawandels ist das hochgradig ineffizient, zumal weder Ethereum noch Bitcoin einen besonders hohen Durchsatz von Transaktionen pro Sekunde aufweisen.
Die Entwickler sind sich des Problems bewusst. Die Gemeinschaft hinter Ethereum schmiedet schon seit längerer Zeit Pläne, zukünftig auf ein alternatives Konsensverfahren namens „Proof of Stake“ (PoS) umzuschwenken. Dabei müssen keine aufwendigen Hashes berechnet werden, sondern die Miner wechseln sich nach einem bestimmten Verfahren ab. Um Manipulation vorzubeugen, verlangt man von den Minern, dass sie im großen Stil in die Währung investieren, bevor sie sich am Mining beteiligen dürfen. Der Beweis, dass das Verfahren tatsächlich funktioniert, steht allerdings noch aus.
„Proof of Authority“-Blockchains (PoA) haben dieses Problem nicht. In solchen Systemen ist von Anfang an eine feste Menge an Knoten vorgegeben, die diktatorisch Blöcke festlegen. Öffentliche Kontrollmechanismen gibt es nicht. PoA-Chains eignen sich besonders für den Unternehmenseinsatz, aber einer der wesentlichen Vorteile von Blockchains – Organisation ohne zentrale Autorität – geht dabei verloren.
Weil der neu geschürfte Block eine Referenz auf seinen Vorgänger enthält, bildet sich eine Kette, deren Glieder nicht nachträglich ausgetauscht werden können – die „Blockchain“. Stets werden neue Blöcke im Netzwerk propagiert, sodass alle Knoten auf dem aktuellen Stand sind. Konsens wird dabei erzielt, indem – vereinfacht gesagt – die längste propagierte Blockkette den aktuellen Stand darstellt. Selbstverständlich validieren alle Teilnehmer die Blöcke, es kann also niemand einfach behaupten, einen gültigen Block generiert zu haben.
Verträge auf der Blockchain
Bei Bitcoin beschränkt sich die Validierung von Transaktionen im Wesentlichen darauf, das erwähnte „Double Spending“ zu verhindern. Darüber hinaus enthält Bitcoin eine sehr eingeschränkte Skriptsprache. Damit kann man zum Beispiel festlegen, dass eine Menge von Coins erst nach einem bestimmten Zeitpunkt ausgegeben werden darf.
Ethereum knüpft hier an und baut die Skriptsprache deutlich aus, sodass im Zuge der Validierung beliebige Programme ausgeführt werden können. Weil diese Programme auf allen Knoten der Blockchain laufen, wird Ethereum auch „World Computer“ genannt: ein global verteilter Computer, den jeder benutzen und niemand manipulieren kann. Die Programme dieses Weltcomputers nennt man „Smart Contracts“ – ein Begriff, der deutlich älter ist als Kryptowährungen: 1996 definierte Nick Szabo Smart Contracts als „eine Menge von Versprechen, die in einer digitalen Form spezifiziert sind; sowie die Protokolle, mit denen die Vertragsparteien diese Versprechen erfüllen“.
Man kann sich so einen Smart Contract folglich wie einen analogen Vertrag vorstellen, der von mehreren Parteien geschlossen wird. Bei einem herkömmlichen Vertrag wachen beispielsweise Notare darüber, dass sich alle Teilnehmer an die Vertragsbedingungen halten. Um – wie bei der Währung – solche zentralen Instanzen zu vermeiden, wacht in Ethereum die Blockchain selbst über die korrekte Ausführung von Smart Contracts. Gewissermaßen tritt also die Gesamtheit aller Mining-Knoten an die Stelle des Notars.
Ethereum-Verträge haben einen eingeschränkten Handlungsspielraum, sie können sich eigentlich nur auf Daten in der Blockchain beziehen. Dazu gehören Vermögensbestände in Ether. Smart Contracts eignen sich daher gut für Kapitalgeschäfte oder den Handel mit rein digitalen Gütern. Physische Dinge wie ein Haus per Smart Contract zu kaufen, ist dagegen deutlich schwieriger: Woher soll die Blockchain wissen, ob das Haus überhaupt existiert? Hinzu kommt, dass der rechtliche Status von Smart Contracts weitgehend offen ist.
Auf der Blockchain wird ein solcher Vertrag in einer speziellen Assemblersprache repräsentiert, die eine dafür konzipierte virtuelle Maschine, die „Ethereum Virtual Machine“ (EVM), ausführen kann (siehe Kasten). Statt direkt in Assembler werden Smart Contracts aber in der Regel in der Ethereum-eigenen, JavaScript-ähnlichen Programmiersprache Solidity entwickelt. Die EVM ist prinzipiell Turing-vollständig, das heißt, alle bekannten Algorithmen lassen sich in ihr umsetzen – mit einem kleinen Haken.
Benzinpreis
Turing-vollständig heißt unter anderem, dass man problemlos Endlosschleifen programmieren kann. Was tut Ethereum nun dagegen, dass beliebige anonyme Teilnehmer einfach die Blockchain mit Endlosschleifen lahmlegen? Die Lösung dafür lautet „Gas“ (Kraftstoff).
Jede Basisoperation der EVM – wie zum Beispiel eine Addition oder die Berechnung eines Hashes – hat festgelegte Ausführungskosten, die in Milliardstel Ether („GWei“ genannt) gemessen werden. Wenn man eine Transaktion in die Blockchain einbringen will, muss man eine gewisse Gebühr mitschicken. Die Gebühr berechnet sich als Produkt des Preises „pro Liter“ multipliziert mit den geschätzten Ausführungskosten des Ziel-Vertrages. Je höher der „Literpreis“ ist, desto eher wird die Transaktion ausgeführt.
Wenn die tatsächliche Vertragsausführung weniger kostet als erwartet, erhält man den ungenutzten Sprit wieder zurückerstattet. Ist man aber zu knauserig oder gibt es einen Fehler im Vertrag, dann verfällt die gesamte Gebühr. In Wahrheit ist die Rechnung noch etwas komplexer, da man auch Speicheroperationen bezahlen muss. Glücklicherweise schätzen Ethereum-Clients vor dem Absenden einer Transaktion die nötigen Gebühren ab und zeigen sie dem User an.
Dank der Gebühren terminiert ein Smart Contract also immer – spätestens, wenn der mitgeschickte Sprit verbraucht ist. Das verhindert, dass jemand unbezahlt Ressourcen im Netzwerk verbraucht. Genau genommen ist die EVM daher nicht Turing-vollständig – aber genau genommen gilt das auch für reale Computer, denn wer hat schon unbegrenzt viel Speicher?
Die Währung Ether braucht man also eigentlich nur, um Smart Contracts zu verwalten. Sie wird zwar auch als Geldanlage oder zum Einkaufen genutzt, aber dieser Nebeneffekt lässt sich auch mit „Tokens“ umsetzen (siehe unten).
Um in Ethereum einen Smart Contract zu nutzen, muss man eine Transaktion an ihn veranlassen. Von alleine tut ein Smart Contract nichts. Empfängt ein Smart Contract eine Transaktion, dann wird die EVM aktiv und führt den Vertrag aus. Deswegen verfügt jeder Knoten im Netzwerk über eine Implementierung dieser virtuellen Maschine, um die Korrektheit der Transaktion zu validieren. Ethereums sogenanntes „Yellow Paper“ spezifiziert formal und bis ins kleinste Detail, wie die EVM funktioniert.
Grob gesagt kennt die EVM nur Instruktionen, die nicht mit der äußeren Welt interagieren. Man kann zum Beispiel keine Dateien lesen, da diese je nach ausführendem Knoten verschieden sein könnten. Stattdessen müssen sämtliche Ausführungen deterministisch sein, das heißt, sie müssen überall das identische Resultat produzieren und sich auch in Zukunft noch nachvollziehen lassen. Dabei handelt es sich um eine fundamentale Eigenschaft von Ethereum: Es herrscht jederzeit ein Konsens, was der aktuelle Zustand der Verträge ist.
Begrenzten Zugriff haben Smart Contracts auf Daten in der Blockchain, zum Beispiel den Zeitstempel des aktuellen Blocks, um Fristen zu prüfen. Es ist auch möglich, Daten in Register zu schreiben, um sie in der Blockchain zu speichern.
Als Aufrufer eines Vertrags kann man – ähnlich wie bei einer Kommandozeile – einen Satz Parameter im Binärformat übergeben. Das genaue Format legt der Vertrag fest, aber es gibt einen vorherrschenden Standard, wie etwa Funktionsnamen kodiert werden sollen. Bei falschen Parametern oder anderen verletzten Bedingungen kann der Smart Contract die Ausführung abbrechen. Der Zustand wird dann zurückgerollt, die Transaktion aber trotzdem als „fehlerhaft“ im Netzwerk gespeichert.
Code is Law
Grundsätzlich kann jeder Smart Contracts entwickeln und im Ethereum-Netzwerk bereitstellen. Allerdings muss man dabei sehr penibel vorgehen. Ein Smart Contract wird unveränderlich in die Ethereum-Blockchain aufgenommen. Spätere Korrekturen oder Manipulationen sind ausgeschlossen, eben weil Verträge verlässlich sein sollen. „Code is Law“ heißt das zugehörige Mantra.
Schon einfache Programmierfehler können dadurch fatale Folgen haben. Am bekanntesten ist ein Fehler in der Smart-Contract-Konstruktion „The DAO“, durch den Ether im Wert von 50 Millionen Dollar gestohlen wurden. Die Ethereum-Community beschloss, den Diebstahl ungeschehen zu machen, aber Code-is-Law-Puristen, die diesen Regelbruch nicht mitmachen wollten, führen die ursprüngliche Blockchain seither als „Ethereum Classic“ weiter.
Ist ein Vertrag einmal in der Blockchain verfügbar, kann man mit ihm auf die eine oder andere Weise interagieren, je nachdem, was für Methoden der Vertrag bietet. Die Blockchain hält nicht nur den eigentlichen Code, sondern auch diese Methodenaufrufe fest. Es ist also für jeden Interessierten möglich, die gesamte Historie eines Smart Contracts nachzuvollziehen.
Die öffentlich einsehbare Plattform etherscan.io macht nicht nur den Code aller Verträge und sämtliche historischen und aktuellen Ethereum-Transaktionen zugänglich. Für eine Reihe von wichtigen Smart Contracts hält Etherscan auch Eigentümer und weiterführende Informationen bereit – Verträge können aber auch anonym sein.
Wie alle Smart Contracts ist auch der CryptoKitties-Vertrag und sein Zustand einsehbar und kann zum Beispiel auf etherscan.io inspiziert werden.
Geld im Vertrag
In Ethereum ist ein Smart Contract genauso adressierbar wie Ether-Konten. Dadurch können Smart Contracts Kryptowährungen verwalten. Das klassische Beispiel hierfür ist eine „virtuelle Geldbörse“, ein Vertrag, der mit einer Liste von verfügungsberechtigten Eigentümern erzeugt wird. Anschließend dürfen zwar beliebige Leute Geld einzahlen, aber eine Auszahlung erfolgt nur, wenn die Mehrheit der Eigentümer sich über den Betrag und den Empfänger einig sind.
Ein Smart Contract kann aber auch die Gestalt eines Unternehmens annehmen. Mit Startkapital ausgestattet, kann er zum Beispiel nach vorgegebenen Regeln Investitionen tätigen oder Unternehmensanteile verkaufen – mit oder ohne Stimmrecht für künftige Investitionen, die Möglichkeiten sind zahlreich.
Manche Smart Contracts schlüpfen sogar in die Rolle einer Zentralbank und geben eigene „Tokens“ aus. Die können dann, ähnlich wie die eingebaute Kryptowährung Ether, gehandelt werden und Wert entwickeln. Die Ethereum-Plattform spielt in solchen Szenarien ihre Vorteile voll aus, denn Interessierte können im Vorhinein den Code dieser Verträge inspizieren und die Implementierung überprüfen. Im Unterschied zur „echten Welt“ kann man sich also sicher sein, dass so ein Bankvertrag nicht pleitegehen kann.
Katzenhandel
Ein spezieller Smart Contract hat 2017 einen regelrechten Hype ausgelöst: die CryptoKitties. Dieser Vertrag ist ein Spiel, in dem man mit Ether individuelle, virtuelle Katzen kaufen und verkaufen kann. Hat man mehr als eine, können sie sich kostenpflichtig fortpflanzen, wobei sie Eigenschaften vererben. So entsteht eine Tauschbörse für digitale Sammelkatzen. Zeitweise war der Handel mit den Kätzchen so beliebt, dass das Ethereum-Netzwerk mit der Verarbeitungen der Transaktionen nicht hinterherkam.
Das Besondere am System ist, dass man keine speziellen Kenntnisse über Ethereum braucht, um mitzumachen. Man kann einfach mit einer geeigneten Browsererweiterung wie MetaMask (siehe Teil 2) über die Adresse cryptokitties.co einsteigen. Hinter der Website steht der Smart Contract, aber als Anwender hat man damit keinen direkten Kontakt.
Dieses Konzept – ein Smart Contract, gepaart mit einer nutzerfreundlichen Website – wird von Ethereum als dezentralisierte Applikation oder kurz „dApp“ bezeichnet.
Die handelbaren Kätzchen sind ein Beispiel für „Non-Fungible Tokens“ (NFT): Jedes Kätzchen ist ein Unikat. NFTs wurden 2018 als „EIP-721“ standardisiert, verschwanden aber eine Zeit lang in der Versenkung. Nun feieren sie ein Comeback, wobei der Hype aktuell weniger auf algorithmisch generierte und „sich fortpflanzende“ Tokens abzielt, sondern auf digitalisierte Kunstwerke.