Solidity Tutorial: Erstellung eines Smart-Contracts

Solidity ist eine objektorientierte Programmiersprache zur Entwicklung von Smart Contracts im Ethereum Netzwerk. Die Sprache ist an Javascript angelehnt und wurde im August 2014 von Gavin Wood ausgearbeitet. Später übernahm die Ethereum-Foundation die Weiterentwicklung. Ich möchte mir in diesem und den folgenden Posts ansehen, was ein Smart Contract überhaupt ist und wie wir einen einfachen entwickeln und in die Ethereum Blockchain deployen können.

Was ist ein Smart Contract in Ethereum?

Die Bezeichnung Smart Contract kann zu Beginn etwas irreführend sein. Es handelt sich dabei eigentlich um nichts anderes als das konkrete Objekt einer Klasse, welches auf der EVM, der Ethereum Virtual Machine läuft. Im Prinzip kennen wir das aus der objektorientierten Programmierung: Man definiert eine Klasse mit Code (=Methoden) und Zustand (=Objektvariablen), aus welcher man dann ein konkretes Objekt erstellt mit welchem man dann arbeitet.

Nichts anderes passiert bei einem Smart Contract, nur dass das Objekt nicht lokal am Computer läuft, sondern in der Blockchain. Die Ethereum Virtual Machine kann man sich wie einen Supercomputer vorstellen, welcher durch alle an dem Netzwerk teilnehmenden Maschinen (Nodes) gebildet wird und die Ausführung des Codes übernimmt.

Die Blockchain übernimmt hier die Aufgabe, die Unverfälschbarkeit des erzeugten Objektes sicherzustellen. Das heisst, es kann zwar jeder die öffentlichen Methoden ausführen, aber niemand kann heimlich die Variablen-Werte oder den Code ändern.

Ein einfaches Beispiel für einen Smart Contract

pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public constant returns (uint) {
        return storedData;
    }
}

Die erste Zeile gibt an, mit welcher Solidity-Version der Code kompatibel ist. Damit wird verhindert, dass der Code sich bei einer neueren Compiler-Version nicht plötzlich anders verhält.

Dann beginnt die Deklaration des Vertrages, welcher mit dem Keyword contract eingeleitet wird. Dies würde z.B. dem class in Java entsprechen. Wir definieren eine interne Status-Variable storedData, welcher über get/set-Funktionen geändert werden kann. Beachte, dass wir in Solidity kein this für das Ansprechen der Variablen benötigen.

Nach dem deployen, d.h. dem Übergeben dieses Contracts an die Ethereum-Blockchain sitzt das daraus erzeugte Objekt an einer eindeutigen Adresse und seine Methoden können über diese Adresse aufgerufen werden.

Das Ergebnis ist, dass nun zwar jeder die Methode aufrufen kann und den Wert setzen. Aber niemand kann dies machen, ohne dass der Aufruf in der Blockchain mitprotokolliert wird.

Dies ist ein erstes einfaches Beispiel, nächstes mal erstellen wir unsere erste eigene Coin (Token) und sehen uns an, wie wir diesen Contract in die Ethereum Blockchain deployen können.

 

Schreibe einen Kommentar