Wie man einfach einen Smart Contract auf Ethereum bereitstellt

19. Juni 2020 - von Pascal Marco Caversaccio

Editors note: Im ersten Teil unserer Blockchain Blogs hat Pascal über dApps und die Grundlagen der Blockchain Technologie geschrieben. Im zweiten Teil wirds nun technischer: Pascal erklärt nicht nur was ein Smart Contract ist, sondern zeigt in einem praktischen Tutorial auch gleich auf, wie man auf Ethereum einen aufsetzt.


Smart Contracts und Ethereum

Im Zentrum der Ethereum-Blockchain steht das Konzept der Smart Contracts. Bitcoins Scripting-Begrenzungen, welche eine eingeschränkte Unterstützung für Smart Contracts bieten, dienten als ursprüngliche Motivation für Ethereum.  

Was bedeutet das genau?

Bitcoin bietet nur begrenzte Unterstützung für Smart Contracts, da die Skriptsprache nicht Turing-komplett ist, was teilweise auf das Fehlen von Schlaufen zurückzuführen ist. Das bedeutet, dass es viele Anwendungen gibt, die von Entwicklern auf Ethereum programmiert werden können, nicht aber auf Bitcoin. Technisch gesehen wurde Ethereum von Anfang an als “eine Plattform für den Einsatz und die Ausführung von Smart Contracts” konzipiert.



Was bedeutet Turing-komplett?

Ethereums Turing-komplette Sprache basiert ursprünglich auf Alan Turings Konzept einer universellen Turingmaschine (UTM). Einfach ausgedrückt, ist eine Turingmaschine eine hypothetische Maschine, die 1936 vom Mathematiker Alan Turing erfunden wurde. Trotz ihrer Einfachheit kann die Maschine jeden Computeralgorithmus simulieren, egal wie kompliziert dieser ist. Die UTM ist nichts anderes als eine Turingmaschine, die eine beliebige Turingmaschine auf willkürliche Eingabe hin simuliert. Da Ethereum jedoch das Konzept eines Gaslimits (= maximaler Preis, den Nutzende bereit sind für eine Aktion zu bezahlen) implementiert, können Entwickler keine Programme ausführen, die mehr Gas als das Gaslimit benötigen. Daher nennt das Ethereum Yellow Paper die Ethereum Virtual Machine, die EVM, eine "quasi-Turing-komplette Maschine". Trotz vieler Ähnlichkeiten ist Ethereum nicht wirklich Turing-komplett, da Entwickler ohne Gas nicht programmieren können, was sie wollen.


Was ist ein Smart Contract?

Werfen wir einen Blick auf die Definition eines Smart Contracts:

  • Ein Smart Contract ist ein selbstausführender Vertrag, bei welchem die Vertragsklauseln zwischen Käufer und Verkäufer direkt in die Codezeilen geschrieben werden.

  • Der Code und die darin enthaltenen Vereinbarungen existieren in einem verteilten, dezentralisierten Blockchain Netzwerk. 

  • Der Code steuert die Ausführung und Transaktionen sind nachvollziehbar und irreversibel. 

Damit sollte aus theoretischer Sicht alles klar sein. Gehen wir also zum praktischen Teil über. Denjenigen, die noch tiefer in die Geschichte von Ethereum und Smart Contracts eintauchen wollen, empfehle ich diesen (englischen) Blogbeitrag


Ein kleines Smart Contract Tutorial

Zweck dieses Tutorials ist es, dir eine der einfachsten Möglichkeiten zu zeigen, wie du einen Smart Contract auf Ethereum-Basis bereitstellen kannst. Dabei folge ich einer bestimmten Struktur, die im Bereich der Entwicklung von Smart Contracts üblich ist. Zuerst stellen wir den Smart Contract lokal auf einer persönlichen Blockchain bereit - ich werde Ganache verwenden. Als zweites setzen wir den Smart Contract in einem der vorgesehenen Testnetzwerk ein: Hier zum Beispiel Rinkeby. Zuletzt stellen wir den Smart Contract im Hauptnetzwerk bereit.

Als Entwicklungsframework verwende ich Truffle. Truffle ist eine Entwicklungsumgebung, ein Testing Framework und eine Asset-Pipeline für Ethereum mit dem Ziel, das Leben eines Ethereum Entwicklers zu erleichtern.

1) Vorbereitung: Die richtigen Tools installieren

Um starten zu können, braucht es einige grundlegende Werkzeuge. Als erstes laden wir Node.js. herunter, wobei es sich mindestens um die Version 8.9.4 handeln muss. Ich gehe ausserdem davon aus, dass Windows, Linux oder Mac OS X verwendet wird. Sobald wir bereit sind, öffnen wir unsere Shell und führen den folgenden Befehl aus: 

Truffle setzt ausserdem voraus, dass wir einen laufenden Ethereum-Client haben, der die standardmässige JSON RPC-API unterstützt (das sind fast alle). Wir verwenden wie gesagt Ganache - Teil der Truffle-Suite - als eine persönliche Blockchain für die Entwicklung von Ethereum, die auf unserem Desktop läuft. Du kannst sie hier herunterladen.

Da wir keinen vollständigen Node installieren wollen, verwenden wir Infura als einen gehosteten Ethereum-Node-Cluster, der es den Benutzern ermöglicht, ihre Anwendung bereitzustellen, ohne einen eigenen Ethereum-Node einrichten zu müssen. Wir erstellen ein einfaches kostenloses Konto auf Infura und erstellen ein neues Projekt. Wir ändern den Endpunkt in den Einstellungen des Projekts auf Rinkeby und kopieren und speichern die URL des Endpunkts für Rinkeby an einen Ort unserer Wahl.

Infura Keys für Rinkeby Endpoints

Jetzt sind wir bereit, einen Smart Contract einzusetzen. Aber natürlich müssen wir dafür zuerst einen schreiben.


2)  Erstellen eines Smart Contracts zur Nutzung der OpenZeppelin Library

Wir erstellen ein neues Verzeichnis für unser Truffle-Projekt:

Für dieses Tutorial nutzen wir die OpenZeppelin library für die Entwicklung von Smart Contracts. Wir können OpenZeppelin installieren, indem wir die folgenden Befehle ausführen:

Bemerkung: Wir verwenden aufgrund von Truffle-Kompatibilitätsproblemen eine spezielle OpenZeppelin-Version.

Im Verzeichnis contracts/ unseres Truffle-Projektes erstellen wir die Datei TestERC20Contract.sol und fügen den folgenden Inhalt hinzu:

3)  Bereitstellen des Smart Contracts auf Ganache: Deine persönliche Blockchain

Lass uns nun den oben entworfenen Smart Contract auf die lokal laufende Blockchain Ganache anwenden. Dazu öffnen wir Ganache und wählen ein Ethereum quick-start Projekt aus. In der Kopfzeile des Projekts erhalten wir die RPC-Serverparameter und die Netzwerk-ID.

Ganache Header

In der Datei truffle-config.js passen wir diese Parameter an. Wir konfigurieren auch die Compiler-Version für die Verwendung von Version 0.5.0, da unser Vertrag in dieser speziellen Solidity-Version geschrieben ist.

Im migrations/ Verzeichnis erstellen wir die Datei 2_deploy_contracts.js und fügen den folgenden Inhalt hinzu:

Jetzt sind wir bereit, unseren Vertrag für die Blockchain zusammenzustellen und einzusetzen. Innerhalb unseres Projektes führen wir zunächst den folgenden Befehl aus, um den Vertrag zu kompilieren:

Sobald die Zusammenstellung abgeschlossen ist, übergeben wir den Vertrag an die Blockchain:

Wir gehen nun zurück zur Ganache-Blockchain und klicken auf "Transactions". Herzlichen Glückwunsch, wir haben unseren ersten Smart Contract lokal bereitgestellt.

Ganache Contract Deployment

Aber das ist noch lange nicht das Ende der Geschichte. Unser nächstes Ziel ist der Einsatz auf dem öffentlichen Testnetzwerk Rinkeby.


4) Einsatz des Smart Contracts

Zu Beginn müssen wir das Paket “@truffle/hdwallet-provider” installieren:

Nun bearbeiten wir die Datei truffle-config.js um den “hdwallet-provider”und die Vermindung zum Rinkeby Netzwerk einzurichten. 

Wir geben einen Verweis auf unser Mnemonic an, das unser Konto auf MetaMask generiert, und fügen die URL des Infura-Endpunkts für Rinkeby ein (siehe oben). Schließlich stellen wir sicher, dass unser Konto genügend Rinkeby-Ether enthält, um die Bereitstellung durchzuführen. Dafür können wir einen Ether faucet verwenden.

Ausserdem ändern wir die Datei 2_deploy_contracts.js wie folgt:

Falls nicht bereits kompiliert, können wir dies tun indem wir truffle compile ausführen. Schliesslich stellen wir es dem Rinkeby Testnetzwerk zur Verfügung:

Deployment Shell

Wir können jetzt unseren Smart Contract auf Etherscan über die Vertragsadresse abrufen. Wenn wir jedoch auf den Tab "Contract" klicken, sehen wir erst nur einen riesigen Haufen von Buchstaben und Zahlen.

Smart Contract auf Etherscan

Um Smart-Contract-Interaktionen durchführen zu können, müssen wir sicherstellen, dass wir wirklich Vertragsersteller*in sind. Falls alles gelingt, wird der riesige Haufen von Buchstaben und Zahlen verschwinden und wir können die Smart Contract Funktionen aufrufen.


5)  Den Smart Contract Code verifizieren

Lass uns das tun: Wir klicken auf “Verify and Publish” und folgen einfach den Anweisungen

Verifizieren und Publizieren des Source Codes
Verifizieren und Publizieren des Source Codes Step 2
Verifizieren und Publizieren des Source Codes Step 3

Herzlichen Glückwunsch, wir haben unseren ersten Smart Contract verifiziert!


6)  Interaktion mit dem Smart Contract über das User Interface von Etherscan

Wenn wir jetzt wieder auf den “Contract” Tab klicken und zu “Write Contract” wechseln, können wir beobachten, dass es nun einfach wird, mit dem eingesetzten Smart Contract zu interagieren. Wir brauchen uns nur mit unserem MetaMask-Konto zu verbinden und können z.B. mit der Genehmigung oder dem Transfer von Token beginnen. 

Der letzte verbleibende Schritt ist die Bereitstellung genau desselben Smart Contracts im Ethereum-Hauptnetzwerk.

Bereitstellung im Ethereum Hauptnetzwerk

7)  Bereitstellen des Smart Contracts im Ethereum-Hauptnetzwerks

Für die endgültige Bereitstellung müssen wir Ether auf unser MetaMask Konto bekommen. Ausserdem ändern wir die network_id in der truffle-config.js Datei auf 1 und passen die Infura URL mit dem Verweis auf das Hauptnetzwerk an.


Warnung: Wenn du Ether an irgendein Konto schickst, das aus Ganache's Standard-Mnemonik generiert wurde, wirst du die Ether verlieren! Also in diesem Zusammenhang mit Bedacht vorgehen.


Es liegt auf der Hand, dass ich auf viele Spezifikationen, die in der Praxis sehr wichtig und ausschlaggebend sind (z.B. Unit-Tests), nicht vertieft eingegangen bin. Dennoch hoffe ich, dass ich deine Neugierde wecken und dich motivieren konnte, mehr über Smart Contracts und ihre Anwendungen zu erfahren. Bei Fragen haben wir natürlich immer ein offenes Ohr: Melde dich jederzeit per Mail oder direkt bei mir via Twitter.

Wir haben grad gemerkt, dass du mit Internet Explorer surfst. Unsere Webseite sieht damit leider nicht so schön aus.

Du willst erfahren warum das so ist?
Wir haben darüber geschrieben.

Zum Blog

Du brauchst Hilfe bei der Umstellung?
Melde dich. Wir helfen gern.

Kontakt

Einen neuen Browser installieren?
Hier gibt es Auswahl.

Browser