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: 


Überblick über das Ethereum System: Das Netzwerk sendet Transaktionen, die von Minern zu Blöcken gruppiert und an die Blockchain angehangen werden. Der Zustand des Systems wird durch die Blockchain bestimmt.



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: 

Überblick über die unterschiedlichen Arten von Accounts und Transaktionen. Externe Accounts haben nur einen Kontostand. Contracts haben zusätzliche Code und Speicherzustand. Transaktionen können Geld überweisen, Code von Contract Accounts ausführen und neue Contract Accounts erstellen.




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 
CAPTCHA
Diese Frage dient der Überprüfung, ob Sie ein menschlicher Besucher sind und um automatisierten SPAM zu verhindern.