Objektorientiert entwickeln für die Blockchain Smart Contracts mit Solidity programmieren

Von Thomas Joos

Anbieter zum Thema

Mit Solidity können Entwickler objektorientierte Anwendungen für Distributed Ledger und die Ethereum-Blockchain entwickeln. Die Syntax der Sprache erinnert an JavaScript und Python.

Die Web-basierte Remix IDE auf Ethereum.org bietet zahlreiche Funktionen.
Die Web-basierte Remix IDE auf Ethereum.org bietet zahlreiche Funktionen.
(Bild: Ethereum.org)

Solidity ist die Standard-Sprache für die Entwicklung von Smart Contracts in der Ethereum-Blockchain. Die Programmiersprache steht kostenlos zur Verfügung und kann auch mit Visual Studio und Visual Studio Code eingesetzt werden. Ein erster Einstieg in die Entwicklung ist in der Dokumentation von Solidity zu finden.

Um Solidity mit Visual Studio und Visual Studio Code zu nutzen, müssen in den Umgebungen Erweiterungen installiert werden. Für die Einbindung gibt es eine VS-Erweiterung speziell für Solidity und die Erweiterung ETHcode für das Kompilieren des Codes in der Ethereum-Blockchains und den diversen Testnetzwerken von Ethereum. Parallel dazu stellt Microsoft das Blockchain Development Kit for Ethereum zur Verfügung.

Atom für die Entwicklung nutzen

Der kostenlose Quellcode-Editor Atom steht ebenfalls für die Entwicklung von Solidity zur Verfügung. Auch hier gibt es Erweiterungen, die den Editor fit für Solidity machen. Die Erweiterungen „Atom Solidity Linter“ und Etheratom integrieren die Solidity-Unterstützung in ATOM und ermöglichen auch die Kompilierung von Smart Contracts für Ethereum.

Einstieg in Solidity mit Remix

Solidity-Code lässt sich in der Web-basierten Remix IDE verfassen.
Solidity-Code lässt sich in der Web-basierten Remix IDE verfassen.
(Bild: Ethereum.org)

Den schnellsten Einstieg in Solidity erhalten Entwickler mit der webbasierten und kostenlosen Web-IDE Remix. Die IDE steht ohne Installation sofort nach dem Aufrufen der Webseite zur Verfügung. Natürlich kann diese nicht nur für den Einstieg genutzt werden, sondern auch für die produktive Entwicklung von Smart Contracts.

Durch einen Klick auf „Solidity“ bei „Featured Plugins“ kann mit der Entwicklung des Solidity-Codes begonnen werden. Das erste Symbol links oben öffnet den File-Explorer in Remix. Hier sind auch bereits einige Dateien mit der Endung *.sol zu finden. Hierbei handelt es sich die Dateiendung für Solidity-Dateien.

Durch einen Klick auf eine Sol-Datei zeigt Remix auf der rechten Seite den Quellcode an. Es ist in Remix auch möglich, mehrere Dateien gleichzeitig zu öffnen. Das Umschalten zwischen den Dateien erfolgt über die Registerkarten im oberen Rand von Remix.

Auch das Kompilieren lässt sich hier direkt realisieren.
Auch das Kompilieren lässt sich hier direkt realisieren.
(Bild: Ethereum.org)

Der Solidity-Quellcode kann in Remix auch kompiliert und getestet werden. Der Compiler für Solidity steht auf der linken Seite über das zweite Symbol von oben mit der Bezeichnung „Solidity Compiler“ zur Verfügung. Vor der Kompilierung muss noch ausgewählt werden, in welcher Version der Code kompiliert werden soll. Beim Kompilieren von Smart Contracts für Ethereum kann hier noch die „Ethereum Virtual Machine“ (EVM) ausgewählt werden, für welche der Smart Contract kompiliert werden soll.

Nach der Kompilierung kann mit „Deploy & Run Transactions“ das Programm oder der Smart Contract getestet werden. Hier besteht auch die Möglichkeit eines Tests in einer Javascript-VM, außerhalb der Blockchain. Beim Menüpunkt „Environment“ kann auch die Bereitstellung in einer Blockchain erfolgen, zum Beispiel in einem Testnetzwerk von Ethereum.

Ein einfacher Smart Contract kann folgendermaßen aussehen:

pragma solidity >=0.7.0 <0.9.0;contract HelloWorld {
   string public greet = "Hello World!";
}

Solidity-Quellcode entwickeln und verbessern

Mit dem Icon „Solidity Static Analysis“ ist es möglich, den Quellcode zu überprüfen und auch zu verbessern. Um ein eigenes Solidity-Programm zu entwickeln, wird am Beispiel von Remix eine neue Sol-Datei erstellt. Diese Datei stellt die Grundlage für den Code dar, so wie auch bei anderen Programmiersprachen.

Ein Smart Contract beginnt mit der pragma-Zeile. In dieser ist zum Beispiel definiert, für welche Solidity-Versionen der Smart Contract laufen soll:

pragma solidity >=0.7.0 <0.9.0;

Anschließend beginnt die Definition des Smart Contracts und dessen Namen. Der Quellcode des Contracts steht zwischen geschweiften Klammern:

contract MeinSmartContract {
}

In Solidity lassen sich danach die Zustandsvariablen speichern. Soll zum Beispiel eine Variable „preis“ als Integertyp „uint“ definiert werden, sieht der Beispielcode bis an diese Stelle so aus:

pragma solidity >=0.7.0 <0.9.0;contract MeinSmartContract {
   uint preis;
}

Auf der Seite „Solidity by Example“ sind zahlreiche Beispiele für einfache Smart Contracts zu finden. Ein einfacher Smart Contract mit simplen Rechenaufgaben sieht folgendermaßen aus:

pragma solidity >=0.7.0 <0.9.0;contract Counter {
   uint public count;
   // Aktuellen Wert von count auslesen
   function get() public view returns (uint) {
      return count;
   }
   // Aktuellen Wert von count um 1 erhöhen
   function inc() public {
      count += 1;
   }
   // Aktuellen Wert von count um 1 reduzieren
   function dec() public {
      count -= 1;
   }
}

Funktionen in Solidity

Mit Functions kann ein Smart Contract aktiv Code ausführen. Generell entsprechen die Funktionen in Solidity den Funktionen aus anderen Programmiersprachen. Beim Definieren einer Funktion kann festgelegt werden, on diese nur für dem Smart Contract selbst zur Verfügung stehen soll (internal) oder auch für andere Verträge (external). Auch die öffentliche Sichtbarkeit in der Blockchain kann definiert werden (public).

Um eine Funktion zu definieren, die einen Parameter akzeptiert und auch weitergibt, kann folgender Befehl verwendet werden:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung
pragma solidity >=0.7.0 <0.9.0;contract MeinSmartContract {
   uint preis;
   function buy(uint preis) public returns (uint)
}

Funktionsmodifizierer können wiederum das Verhalten von Funktionen in Solidity anpassen. Beispiel dafür kann das Überprüfen sein, ob der jeweilige Benutzer im Distributed Ledger auch als Verkäufer definiert ist:

pragma solidity >0.7.0 <0.8.0;contract Marketplace {
   address public seller;
   modifier onlySeller() {
      require(
         msg.sender == seller,
         "Only seller can put an item up for sale."
      );
      _;
   }
   function listItem() public view onlySeller {
      // ...
   }
}

Dieses und weitere Beispiele sind im Microsoft-Lernmodul für Solidity zu finden. Dieses stellt eine gute Grundlage für den Einstieg in Solidity dar.

(ID:47478064)