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