/ Buch

Smart Contracts: Wie Ethereum funktioniert

TL:DR Für was sind Ethereums Smart Contracts gut und wie funktionieren sie: Ethereum erlaubt das einfache Erstellen dezentraler Anwendungen aller Art. Anstelle einer Firma vertrauen zu müssen, kann ich in den Code des Smart Contracts schauen, bevor jemand mein Geld bekommt.

Dieser Artikel ist der dritte zum Thema Ethereum nach Dezentrale Anwendungen verstehen - Namecoin und Dezentrale Anwendungen verstehen - Digitale Assets.

Hinter Ethereum steckt eine recht umfangreiche Vision. Um diese zu verstehen, widmen wir uns heute der Funktionsweise von Smart Contracts. Am Ende hast du ein Gefühl, was mit Ethereum alles möglich ist und zu welchem Preis.

Wer Visionen hat sollte zum Arzt gehen! Wusste schon unser Kanzler

Deswegen gibt es für dich, Dirk, vorab

Die harten Fakten

  • Ethereum hat sich als zweitgrößter Coin nach Marktkapitalisierung hinter Bitcoin etabliert und bleibt da wohl auch erst einmal
  • Ethereum basiert auf einer dezentralen Blockchain im Stile Bitcoins
  • Ethereum ist nicht nur ein Kryptogeld, sondern eine Plattform für dezentrale Anwendungen und hat komplett neue Anwendungsfelder erschlossen
  • NEO erhebt den Anspruch ein verbessertes Ethereum zu sein und erlebt zur Zeit viel Hype
  • Ethereum hat das Skalierungsproblem noch nicht gelöst, an dem Bitcoin und andere proof-of-work-basierte Coins kranken; Ethereum skaliert sogar noch schlechter als Bitcoin

Also ich muss schon sagen - einerseits behauptest du, du willst über technische Dinge schreiben und nicht zum Traden anstiften, andererseits schon wieder so eine Nummer: Wie soll ich denn jetzt nicht das Gefühl haben, ich hätte Ether kaufen sollen und muss bei NEO noch ganz schnell einsteigen?

Öh … tu’s nicht! Um die Bedeutung eines Coins einzuschätzen ist die Marktkapitalisierung kein schlechter Ausgangspunkt. Das bedeutet, dass viele Leute ihr Geld da reingesteckt haben, und - ja - logischerweise auch, dass die ersten Investoren damit reich geworden sind. Das liegt leider in der Natur der Sache.

Davon abgesehen ist Ethereum schon in gewisser Weise ein sehr opportunistisches Investment gewesen und das dürfte in noch höherem Ausmaße für NEO gelten. Dieser Hype findet ohne mich statt.

“Opportunistisches Investment” - Was ist denn dein Gegenentwurf dazu? Irgendwas haben die Leute ja verstanden, die da rechtzeitig eingestiegen sind

Das verdient wohl einen eigenen Artikel. Ich will nur hierauf hinweisen: Die Angst, etwas zu verpassen, ist ein denkbar schlechter Ratgeber. Es gibt dafür auch das schöne Kürzel FOMO für fear of missing out. Meine Hoffnung ist, dass es unabhängig vom Hype auch einfach Interesse an den Entwicklungen im Bereich Kryptogeld gibt. Und wenn jemand dabei reich wird - und andere arm - sei es drum.

… solange du zu denen gehörst, die reich geworden sind, hab schon verstanden. Was kann Ethereum jetzt also, was so viel weiter geht als Bitcoin?

Dezentrale Anwendungen

Mit dem Erfolg von Bitcoin gab es auch Ideen, neben einem dezentralen Bezahlsystem andere dezentrale Anwendungen umzusetzen.

Das Ethereum-White-Paper nennt als Beispiele Namecoin und Colored Coins. Bei Ethereum geht es später praktisch ausschließlich um solche dezentralen Anwendungen und deshalb macht es Sinn, sich diese Beispiele mal genauer anzuschauen.

Namecoin ist ein Beispiel für eine nicht-finanzielle dezentrale Anwendung, wo man den Code von Bitcoin kopiert hat, um eine eigene, unabhängige Blockchain ins Leben zu rufen. Den Hintergrund und die damit verbundenen Vor- und Nachteile hab ich in einem eigenen Artikel beschrieben.

Colored Coins war ein Vorschlag zur Erweiterung von Bitcoin - d.h. ohne eigene Blockchain - um “digitale Assets”, was letztlich bedeutet: Innerhalb der Bitcoin-Blockchain könnte man dank Colored Coins seine eigene Unterwährung gründen. Auch dazu gibt es die ganze Story etwas ausführlicher.

Wie funktioniert Ethereum jetzt also?

Das Gute ist: Die meisten technischen Aspekte von Bitcoin finden auch bei Ethereum wieder Anwendung. Es gibt private keys, Adressen, eine Blockchain, proof-of-work, dementsprechend auch Miner und Nodes. Wer das noch einmal nachlesen will, kann beim Artikel Von privaten Schlüsseln, Unterschriften und Adressen anfangen und die Reihe “Kryptogeld wirklich verstehen” durchlesen. Anstelle von Bitcoins Transaktionen treten bei Ethereum die mächtigeren smart contracts.

Von diesen hab ich schon einmal gehört. Was ist denn das genau, ein “smart contract”?

Wenn wir uns noch einmal anschauen, was eigentlich eine Bitcoin-Transaktion genau war, gehört gar nicht mehr viel dazu den Sprung zum smart contract zu verstehen. Sinngemäß bedeutet eine Transaktion: Bitcoins wandern von Person A zu Person B und das wird in der Blockchain dokumentiert.

Selbst Bitcoin-Transaktionen können jetzt schon ein bisschen mehr. Wir haben da nur die simpelste Transaktion angeguckt. Tatsächlich muss ich Bitcoins mit einer Transaktion nicht einfach an eine Adresse schicken. Das Bitcoin-Protokoll erlaubt prinzipiell, stattdessen eine Bedingung zu formulieren, die festlegt, wer wie an die Bitcoins rankommt.

Ich kann natürlich die einfachstmögliche Bedingung wählen: “Der Besitzer des private keys dieser Adresse hier darf die Bitcoins ausgeben” - dann haben wir wieder die simpelste Transaktion.

Praktisch alle Transaktionen in der Blockchain sind von diesem simpelsten Typ.

Jetzt gib also bitte ein Beispiel für eine Transaktion, die nicht simpel ist!

Der nächst-populäre Typ ist eine Multi-Signature-Bedingung, wo ich festschreiben kann, dass nur mehrere Besitzer zusammen die Bitcoins ausgeben dürfen. Praktisch sind dann statt einem mehrere private keyserforderlich. Ich kann damit einen extrasicheren Tresor simulieren, wo zwei Leute je einen Schlüssel haben und den nur gemeinsam öffnen können.

Im Allgemeinen heißt die Technologie hinter diesen Transaktion: pay-to-script-hash = P2SH. Der Name deutet es schon an: Anstatt an eine gewöhnliche Adresse, kann ich jetzt Bitcoins an ein Skript transferieren, bzw. an den Hash eines Skripts, was aber auf das gleiche hinausläuft. Und das Skript legt fest, wer in Zukunft wie über die Bitcoins verfügen kann.

Wenn hier viele Begrifflichkeiten unklar sind, möchte ich noch einmal die Lektüre des Artikels Von privaten Schlüsseln, Unterschriften und Adressennahelegen.

Noch mal langsam bitte: wenn ich also Bitcoins an so ein Skript transferiere: Wem gehören die denn dann?

Das ist jetzt genau der Witz: Die gehören erst einmal niemandem außer dem Skript. Um die Bitcoins aus dem Skript rauszubekommen, muss man die Bedingungen erfüllen, die das Skript definiert. Wir werden uns an den Gedanken gewöhnen müssen, dass es eine gute Idee ist, Bitcoins in ein Skript reinzutransferieren und dass die da auch eine Weile gut aufgehoben sind.

Vielleicht sollte man in dem Fall gar nicht mehr von einer Transaktion sprechen … denn mit “Transaktion” verbinde ich immer noch, dass einfach etwas den Besitzer wechselt

Guter Einwand! Nun schränkt Bitcoin jetzt allerdings stark ein, was so ein Skript alles beinhalten kann, sodass das Multi-Signature-Beispiel das einzige bleibt, was überhaupt relevant ist (wer da mehr weiß als ich, möge bitte kommentieren).

Das Bild fügt sich zusammen. Ethereum hebt die Beschränkungen der Bitcoin-Skripte auf und wenn ich in Ethereum Coins an ein “Skript” überweise, dann stecke ich die Ether in Wirklichkeit in einen “smart contract”

Ins Schwarze! Und der smart contract definiert eben die Regeln, nach denen die Coins ausgezahlt, einbehalten oder sogar an andere smart contracts transferiert werden.

Wir haben oben schon zwei Beispiele für dezentrale Anwendungen gehabt, die recht einfach mit Smart Contracts realisiert werden können. Um aber grundsätzlich zu verstehen, welche Möglichkeiten und Grenzen es für dezentrale Anwendungen gibt, schauen wir an, in welcher Welt so ein Smart Contract eigentlich lebt.

Die Welt einer Anwendungen

Bevor es Smartphones und Apps gab, gab es noch diese Desktop-Anwendungen, die ich auf meinem Computer ausführen konnte. Ich kann so eine Anwendung starten und dann läuft die Anwendung interaktiv: Das heißt, sie reagiert unmittelbar auf den Input durch das User-Interface = ich klicke auf Buttons usw. und zwar bis ich die Anwendung wieder beende.

Es gibt aber auch Websites bzw. Server-Anwendungen. Steemit.com wäre z.B. eine Server-Anwendung, die (unter Anderem) für eine URL (User-Input) einen Artikel aus einer Datenbank holt und bereitstellt, sodass dieser dann im Browser angezeigt wird. Solange niemand eine URL aufruft, “schläft” der Steemit-Server und wartet auf Anfragen. Im Gegensatz zu meiner Desktop-Anwendung wird der Server nicht ausgeschaltet, nur weil ich schon um 4:00 Uhr schlafen gehe und den Computer ausmache.

Ein Smart Contract wird nun zuallererst einmal ausgeführt, wenn er hochgeladen wird. Man kann sagen: er wird initialisiert. Wenn meine Absicht nur ist, Daten in der Ethereum-Blockchain zu speichern, wäre die “Initialisierung” schon alles. Praktisch verhalten sich Smart Contracts aber mehr wie Server-Anwendungen: ich kann eine Transaktion an einen Smart Contract schicken. Daraufhin erwacht der Smart Contract aus seinem Schlaf und kann etwas für mich machen.

Wann immer ich will, dass ein Smart Contract was für mich macht, muss ich Ether mitschicken. Ether ist die interne Währung von Ethereum.

”Was für dich machen”: Was wäre das konkret?

Im Fall von einem Namecoin-Smart-Contract könnte ich so z.B. eine Domain registrieren. Der Steemit2.0-Shares-Smart-Contract könnte mir gegen Zahlung von Ether steemit2.0 shares gutschreiben. Bei einem Casino-Smart-Contract könnte ich eine Wette platzieren.

Kann so ein Smart Contract auch selber aufs Internet zugreifen und Informationen holen?

Das funktioniert anders: Ich muss den Smart Contract mit Informationen füttern. Ich kann aber auch einen entsprechenden Service anbieten und mir das dann bezahlen lassen, indem ich einen Smart Contract schreibe, den ich selber mit Live-Informationen aus dem Internet fütter (z.B. Aktienkurse) und andere Smart Contracts können sich gegen ein kleines Entgeld von meinem Smart Contract mit Informationen versorgen lassen.

Die Smart-Contract-Revolution

Das klingt ja alles soweit ganz fluffig. Kannst du vielleicht noch mal für mich abgrenzen, wann ich einen Smart-Contract brauche und wann ich einfach ganz normal eine Webseite betreiben würde?

Dieses Wort “fluffig” ist nun aber wirklich out-of-character.

Punkt 1: Ich rede nun einmal so. Punkt 2: So langsam wird es wirklich schizophren

Wie du meinst. Wir müssen uns daran erinnern, dass die Grundlage für Ethereum eine dezentrale Blockchain ist. Der Code eines Smart Contracts ist für alle Welt öffentlich auf vielen anonymen Nodes gespeichert. Wenn ein Smart Contract ausgeführt wird, werden auch die Ergebnisse für alle Welt öffentlich dokumentiert.

Wenn du also bei einem Broker wie flatex eine Aktie kaufst, erhältst du für dein Geld ein vertraglich zugesichertes Versprechen, dass du die Aktie bekommst. Du vertraust deiner Bank. Wenn du dagegen an einen steemit2.0-shares-Smart-Contract Ether überweist, kannst du und die ganze Welt dabei zusehen, wie dir steemit2.0 shares für deine Ether gutgeschrieben werden. Deine Transaktion landet in der unabänderlichen Blockchain und niemand kann sie rückgängig machen. Du kannst prinzipiell bei jedem Smart Contract in den Code gucken und dich vergewissern, dass der tut, was du willst. Kein Vertrauen in irgendjemanden notwendig - nicht einmal in die Autoren des Smart Contracts. Deshalb Ethereums Leitspruch: Code is law.

Bei dezentralen Anwendungen gilt: Es gibt einen transparenten, unabänderlichen Automatismus anstelle eines Service-Versprechens einer Firma. Diesen Unterschied kann man nicht stark genug betonen.

Es sei denn, das unmögliche geschieht doch wie nach dem DAO-Hack und der “unabänderliche Automatismus” wird nachträglich korrigiert

Korrekt, die Story gibt es auf englisch nachzulesen hier. Es gibt noch einen weiteren wichtigen Aspekt. Diese dezentrale Ausführung von Anwendungen verursacht Kosten. Jeder Ethereum-Full-Node, der einen Block validiert, führt den Code aller Smart-Contracts aus und alle Nodes kommen parallel zu dem gleichen Ergebnis und speichern das.

Klingt ein weiteres Mal nach unverhältnismäßigem Einsatz von Ressourcen

Redundanz ist eine wichtige Eigenschaft einer dezentralen Blockchain und redundante Berechnung ist die Konsequenz aus der Erweiterung einer Blockchain um beliebige dezentrale Anwendungen. Die immensen Ressourcen, die in Summe benötigt werden, müssen zudem natürlich finanziert werden.

Siehe Bitcoins Transkationskosten!

Indeed. Bei Ethereum gibt es auch Transaktionskosten. Und zwar bezahle ich Ether abhängig davon, wie viele Rechenschritte und wie viel Speicher ich in Anspruch nehme. Smart Contracts müssen einfach gestrickt und effizient sein, sonst wird es schnell teuer. Wenn ich nicht genug Ether mitschicke, wird die Berechnung abgebrochen und alles rückgängig gemacht, als wäre nichts gewesen. Nur meine Transaktionskosten muss ich trotzdem zahlen.

Das verhindert nebenbei auch ganz praktisch einen möglichen Angriff: Ich könnte ja aus purem Hass einfach einen Smart Contract mit einer Endlosschleife einspeisen und Ethereum lahmlegen.

… aber wenn ich nicht zahlen kann, hat sich’s was mit Endlosschleife. Sind die Transaktionskosten bei Ethereum auch so explodiert wie bei Bitcoin? Die müssten doch auch ganz üble Probleme mit dem Skalieren haben

Das, lieber Dirk, erfährst du im nächsten Artikel.

Liebe Leser

Mein Anspruch ist, mehr zu liefern als die sonst im Überfluss vorhandene oberflächliche Information. In diesem Artikel kommt einiges zusammen. Ich hoffe, das der ein oder andere, der schon länger dabei ist, auf den älteren Artikeln aufbauen kann und nun auch Ethereum auf einem technischen Niveau versteht. Natürlich ist aber noch lange nicht alles zum Thema gesagt!

Weiterlesen? Leider war das vorerst der letzte Artikel dieser Serie.

Du bist hier Smart Contracts: Wie Ethereum funktioniert

Voriger Artikel Eine andere dezentrale Anwendung: Digitale Assets

Zurück zur Inhaltsübersicht