Ethereum
Was genau ist eigentlich ein Smart Contract?
(10.08.2018)
Förderjahr 2017 / Project Call #12 / ProjektID: 2158 / Projekt: EtherTrust
Hallo zusammen, Tut uns leid, dass es solange nichts mehr von uns zu lesen gab! Wir waren sehr beschäftigt, aber dafür gibt es jetzt viel zu berichten! Den Anfang wollen wir damit machen zunächst ein bisschen mehr über Ethereum und die Sprachen, in denen Smart Contracts geschrieben werden, zu erzählen. Smart Contracts unterscheiden sich nämlich an einigen Stellen von anderen Programmen und diese Unterschiede sind wichtig um zu verstehen, warum so viele Fehler beim Schreiben von Smart Contracts passieren. Aber lasst uns ganz vorne anfangen! Um zu verstehen was Smart Contracts genau sind, schauen wir uns zunächst Ethereum einmal genauer an. Um das Ganze besser zu verstehen, hilft es zunächst einmal sich das Ziel von Ethereum (und anderen Cryptocurrencies) bewusst zu machen: Es gibt viele Netzwerkteilnehmer, die Aktionen ausführen (zum Beispiel Geld überweisen) und das Ziel ist, dass sich alle Netzwerkteilnehmer darauf einigen, wie der aktuelle Zustand des Systems aussieht (also zum Beispiel der Kontostand aller Teilnehmer). In Ethereum geht es nun nicht nur um den Kontostand, sondern es gibt auch noch Smart Contracts, Programme, die Geld verwalten. Deshalb besteht der Zustand des Systems aus den Zuständen unterschiedlicher Accounts, wobei ein Account entweder einem Netzwerkteilnehmer gehören kann und nur einen Kontostand hat (dann sprechen wir von externen Accounts), oder aber den Zustand eines Smart Contracts darstellt und damit neben dem Kontostand auch noch den Code und den Speicherzustand des Contracts beinhaltet (wir nennen solche Accounts dann Contract Accounts). Das Mittel, das es ermöglicht, dass sich alle Teilnehmer auf einen Gesamtzustand (oder ‚Globalzustand‘) einigen, ist die sogenannte Blockchain. Die Blockchain ist erstmal nichts anderes als eine änderungsresistente Datenstruktur, die die einzelnen Transaktionen der Netzwerkteilnehmer aufzeichnet. Die Blöcke sind einfach nur Listen solcher Transaktionen. Wenn sich alle Netzwerkteilnehmer auf den Zustand der Blockchain geeinigt haben, dann haben sie sich auch auf einen Globalzustand geeinigt, weil der dieser einfach ‚berechnet‘ werden kann, indem alle Transaktionen nacheinander nach einer fest geschriebenen Semantik (https://www.netidee.at/ethertrust/der-mathematische-kern-von-ethereum-smart-contracts) ausgeführt werden. Die Magie kommt dabei ins Spiel, wie die Blockchain erweitert wird, so dass alle Netzwerkteilnehmer sich einig sind. Darauf wollen wir hier aber gar nicht so genau eingehen. Nur soviel: einige bestimmte Netwerkteilnehmer (so genannte ‚Miner‘) erstellen aus den Transaktionen im Netzwerk neue Blöcke, aber dazu müssen sie sehr viel Rechenleistung aufbringen. Das gewährleistet, dass nicht ein Miner alleine alle Blöcke anhängen kann, sondern die Blöcke von unterschiedlichen Minern erstellt werden. Außerdem prüfen alle Netzwerkteilnehmer, ob die neuen Blöcke auch ‚korrekt‘ sind. Das folgende Bild fasst das alles nochmal zusammen:
Der Globalzustand ist in der Wolke dargestellt und ergibt sich aus der Blockchain. Er besteht aus externen Accounts (blau) und Contract Accounts (rot). Die Miner (hier als Bergarbeiter dargestellt, erweitern die Blockchain und alle Netzwerkteilnehmer können ihre Transaktionen schicken. Was für uns jetzt besonders interessant ist, ist wie der Globalzustand durch die Transaktionen geändert wird, also die Semantik. Dazu schauen wir uns die unterschiedlichen Arten von Transaktionen einmal genauer an. Das folgende Bild gibt einen Überblick über die unterschiedlichen Transaktionsarten:
In Ethereum gibt es drei Arten von Transaktionen: - Man kann Geld an einen externen Account überweisen - Man kann Geld an einen Contract Account schicken und gleichzeitig seinen Code ausführen - Man kann einen neuen Contract erstellen Und all diese Transaktionen können auch wieder von einem Contract selbst ausgelöst werden! Also ein Contract kann in seinem Programmcode stehen haben, dass wenn er ausgeführt wird, er einen neuen Account erstellt und den dann eventuell sogar direkt wieder ausführt! Und das ist schon die erste große Besonderheit der Programmiersprache, in der Smart contracts geschrieben werden: Sie beinhaltet genau solche Konstrukte, die diese Form von Interaktion ermöglichen. Wie genau dieser Code dann aussieht und welche anderen Besonderheiten er hat, werden wir in unserem nächsten Post beschreiben! Euer EtherTrust Team