Blockchain-Programmierung: Solidität. Programmieren der Smart Contracts

In über 10 Jahren seiner Entwicklung hat sich Blockchain von einem einfachen System zur Wertübertragung über Münzen auf die Basis für Web 3.0 und dezentrale Anwendungen erheblich erweitert. Dies geschah hauptsächlich aufgrund eines Ausbruchs neuer Projekte, nachdem Ethereum seinen ERC20-Standard und seine intelligenten Verträge eingeführt hatte.

Intelligente Verträge wurden häufig beim Sammeln von Spenden für ICOs eingesetzt, um Transparenz für die Teilnehmer zu gewährleisten. Dies machte sie berühmt, aber das war nicht die einzige Implementierung. Es gibt erfolgreiche Fälle für intelligente Verträge bei der Schaffung verteilter autonomer Organisationen, der Verwaltung von Rechten und der Durchführung von Governance. Die Notwendigkeit für sie ist so offensichtlich, dass es sogar Versuche gibt, intelligente Verträge für Bitcoin zu erstellen.

Wenn Sie es im Blockchain-Engineering schaffen möchten, müssen Sie wissen, wie intelligente Verträge funktionieren und wie sie erstellt werden. Glücklicherweise bietet Ethereum alles Notwendige, einschließlich seiner eigenen Programmiersprache – Solidity. Diese Sprache wurde speziell für die Arbeit mit Ethereum Virtual Machine entwickelt. Es ist ziemlich leicht zu verstehen, aber es gibt einige Besonderheiten, die Sie beachten müssen. Heute werden wir tief in die Welt der intelligenten Verträge eintauchen und einige davon codieren. Lass uns loslegen!

Wie funktioniert Ethereum??

In erster Linie müssen wir die Grundlagen der Blockchain von Ethereum und deren Funktionsweise verstehen. Dies wird uns helfen, den Unterschied zwischen der Codierung zentraler und dezentraler Apps (die im Grunde genommen intelligente Verträge sind) zu verstehen..

Ethereum verfügt im Kern über eine virtuelle Maschine. Sie sind ihnen wahrscheinlich schon früher begegnet, als Sie alte Spiele in einem Emulator gestartet oder eine betriebssystemspezifische Software auf dem nicht nativen Betriebssystem ausgeführt haben. In einfachen Worten ist eine virtuelle Maschine ein Computer in einem Computer, der die Hardware der ursprünglichen Maschine verwendet. Im Fall von Ethereum verwendet das EVM Ressourcen von Computern, die mit dem Netzwerk verbunden sind (Knoten). Wie jede andere VM verfügt auch die von Ethereum über einen eigenen RAM und ein eigenes ROM, die von darauf laufenden Programmen verwendet werden. Die einzige signifikante Ausnahme besteht darin, dass der ROM-Speicher des EVM eine Blockchain ist. Sobald etwas dort ankommt, kann es nicht mehr entfernt werden.

Warum ist das wichtig? Das Erstellen intelligenter Verträge ist eine unglaubliche Verantwortung, da im Falle einer Sicherheitslücke das Geld der Benutzer gestohlen werden oder verloren gehen kann. Während Sie den Code auf einem zentralen Server ändern oder vollständig ersetzen können, können Sie dies auf einer dezentralen VM nicht tun. Darüber hinaus müssen für jede Aktion, die mit einem intelligenten Vertrag ausgeführt wird, Gebühren an das Netzwerk gezahlt werden. Warum? Weil das EVM eine bestimmte Aufgabe verarbeiten muss und dies nur unter Verwendung der Verarbeitungsleistung einiger Knoten tun kann. Die Gebühren heißen Gas und werden in Gwei bezahlt, ähnlich wie bei Satoshi von Bitcoin.

Wie funktioniert ein intelligenter Vertrag??

Wenn Sie jemals Ethereum verwendet haben, haben Sie mindestens einmal eine Brieftasche im Netzwerk generiert. Ihre Brieftasche ist im Grunde ein Konto, das durch eine Adresse dargestellt wird. Ein intelligenter Vertrag ist ebenfalls ein Konto, unterscheidet sich jedoch von einem regulären Konto.

Sobald Sie eine Brieftasche erstellt haben, können Sie sie mit einem der verfügbaren Netzwerke verbinden. Das einzige, was sich ändert, ist Ihr Guthaben. Dies liegt daran, dass Benutzeradressen nicht netzwerkintern sind – sie existieren parallel. Andererseits ist eine Instanz eines intelligenten Vertrags in einer bestimmten Blockchain enthalten und kann nicht in einer anderen Kette angezeigt werden. Um einen Vertrag nach dem Testen im Hauptnetzwerk starten zu können, muss beispielsweise der Ersteller von Rinkeby eine neue Instanz des Vertrags bereitstellen. Dazu muss der Quellcode erneut kompiliert werden. Ein Vertragsersteller kann so viele Instanzen des Codes erstellen, wie er möchte, solange er über genügend ETH verfügt, um Gas für die Interaktion mit dem Netzwerk zu bezahlen.

Genau wie eine zentralisierte Anwendung verfügt ein intelligenter Vertrag über einen eigenen Speicherort für seine Ressourcen und einen Platzhalter für Code (stellen Sie sich diese als Webseite vor, die Sie aus dem Internet herunterladen, sie enthält eine HTML-Datei und einige Ordner mit Bildern und anderen Zeug). Es gibt auch einen Hinweis darauf, wie viel ETH ein Vertrag auf seinem Kontostand hat; Dies ist entscheidend für verschiedene Anwendungsfälle wie Fundraising, Testamente usw. Das vollständige Schema ist in der folgenden Abbildung dargestellt.

Ethereum EVM & amp; BrieftaschenschemaBild von U.Today

So erstellen Sie einen intelligenten Vertrag?

Jetzt, da wir die Prinzipien kennen, wie Ethereum funktioniert und wie intelligente Verträge darin laufen, können wir selbst einen erstellen. Zunächst müssen wir die richtige Umgebung einrichten. Sie können zwei Wege gehen, indem Sie entweder den Code im Browser mit der von Ethereum Foundation bereitgestellten Remix-IDE schreiben oder eine Codierungs-App Ihrer Wahl zusammen mit einigen Paketen herunterladen. In diesem Tutorial zeigen wir Ihnen sowohl Remix als auch Atom (eine universelle Codierungs-App für Mac) & Windows).

Der erste intelligente Vertrag, den wir abschließen werden, wird die Namen verschiedener Automodelle und ihre Leistung tragen. Was wir sehen wollen, sind zwei Eingabe- und zwei Ausgabefelder für die Werte, die wir haben. Da wir die Eingaben ändern werden, müssen wir Variablen von zwei Typen festlegen: eine Zeichenfolge für die Namen und eine Ganzzahl für die Leistung.

Vor unserem Vertrag werden wir eine Zeile einfügen, die die Sprachversion angibt, da dies dem Compiler hilft, den Code richtig anzupassen. Das Kompilieren des Codes ist erforderlich, da der Code nach Erreichen der Bereitstellungsphase an den Maschinencode angepasst wird, den das EVM lesen und verarbeiten kann. Darüber hinaus wird eine binäre Anwendungsschnittstelle erstellt, die bei der Erstellung einer vollwertigen dezentralen Anwendung weiter verwendet werden kann. Sie können jederzeit die neueste Version von Solidity auf der offiziellen Website überprüfen. Um dies anzugeben, geben Sie “Pragma Solidity” und die Version nach dem “^” – Zeichen ein.

Um Grenzen für unseren Vertrag festzulegen, geben wir ihm einen Namen, gefolgt von einer Klammer. Zunächst werden zwei Variablen deklariert: “Modell” und “HP”. Die erste ist eine Zeichenfolge, die ein Automodell darstellt, und die zweite ist eine Ganzzahl, die die Leistung eines bestimmten Automodells darstellt. Es gibt zwei Dinge, die bei Variablen in Bezug auf die Solidität zu erwähnen sind. Ersteres ist, dass wir erklären sollten, ob Dritte sie sehen können oder nicht, indem wir “öffentlich” oder “privat” neben sie stellen. Letzteres ist, dass die Ganzzahlen in Solidity vorzeichenbehaftet oder vorzeichenlos sein können. Eine vorzeichenlose Ganzzahl kann nur möglich sein und wird als “uint” geschrieben. Eine vorzeichenbehaftete Ganzzahl kann beide positiv sein & negativ und wird als “int” geschrieben.

Nachdem wir unsere Variablen angegeben haben, ist es Zeit, einige Funktionen zu schreiben, die unser intelligenter Vertrag ausführen wird. Erstens müssen wir Platzhalter für unser Modell und HP erstellen. Wir werden einige festgelegte öffentliche Funktionen verwenden und unsere Variablen an sie anhängen. Zweitens müssen wir einige Funktionen zum Abrufen öffentlicher Elemente skizzieren, die eine Eingabe zurückgeben. Sehen Sie sich an, wie unser intelligenter Vertrag aussieht.

Fahrzeugmodell & amp; PS intelligenter VertragBild von U.Today

Wie man einen Token auf Ethereum macht?

Viele Menschen waren von der Blockchain-Branche angezogen, weil der Kryptomarkt Ende 2017 unverschämte Zuwächse verzeichnete. Dies war hauptsächlich das Ergebnis der Einführung des neuen ERC20-Token-Standards, mit dem eine große Anzahl von Startups ihre Token startete und sammelte Geld für die Entwicklung. Trotz des Rückgangs des Hype starten einige Unternehmen ihre Token immer noch auf Ethereum und verkaufen an Mitwirkende, was beweist, dass die Nachfrage immer noch da ist. Wenn Sie schon immer davon geträumt haben, ein Startup aufzubauen und Ihren Token zu starten, ist dieser Teil sehr interessant.

Das Erstellen eines Tokens bedeutet die Verwendung des ERC20-Standards, der schnell gegoogelt werden kann. Vergessen Sie nicht, die Version von Solidity vor dem Standard selbst einzustellen. Es wird eine Reihe von Funktionen und einige Ereignisse geben, die Aktionen im Hauptbuch des Ethereum protokollieren sollen. Unter den Funktionen finden Sie die erforderlichen Funktionen: eine zum Definieren des Gesamtangebots, eine zum Überprüfen des Gleichgewichts einer bestimmten Brieftasche und eine zum Übertragen von Token zwischen Brieftaschen. Da mit Ethereum Brieftaschen von anderen Brieftaschen aus gesteuert werden können, finden Sie auch Funktionen, die eine Zielbrieftasche definieren und einen Saldo für die Übertragung und Genehmigung einer Transaktion ermöglichen. Speichern Sie dies in einer separaten.sol-Datei.

Es ist Zeit, unser eigenes Token zu skizzieren. Beginnen Sie mit den Spezifikationen der Version von Solidity. Importieren Sie dann die Schnittstelle und hängen Sie sie über “Ist” an einen neuen Smart-Vertrag an. Wenn wir weiter gehen, werden wir:

  • Umreißen Sie zunächst das Symbol, den Namen und die Anzahl der Dezimalstellen in Variablen. Mit der Anzahl der Dezimalstellen kann der Benutzer Teile eines Tokens übertragen und speichern. Die häufigste Anzahl von Dezimalstellen ist 18. Alle diese Werte sind für Benutzer sichtbar, daher machen wir sie öffentlich.

  • Zweitens definieren wir das Gesamtangebot. Im Fall dieses Tutorials wird es festgesetzt und entspricht einer Milliarde.

  • Drittens erstellen wir Zuordnungen zur Überprüfung des Guthabens auf Brieftaschen und Zulagen, falls ein Dritter eine Adresse kontrolliert.

  • Viertens legen wir eine Funktion fest, die bei der Bereitstellung des Vertrags (Konstruktor) nur einmal ausgeführt wird und die unserer Adresse alle von uns erstellten Token gibt.

  • Fünftens müssen wir eine Reihe von Funktionen erstellen, die das, was wir in der Schnittstelle haben, einschränken. Das Gesamtangebot wird aus der zuvor deklarierten Variablen entnommen. Die Salden werden entsprechend der Zuordnung überprüft. Die Übertragung ist nur zulässig, wenn ein Benutzer über eine ETH verfügt und weniger oder gleich viel sendet, als er tatsächlich hat. Die Steuerung einer anderen Brieftasche erfolgt gemäß der zuvor definierten Zuordnung und Überprüfung der zulässigen Menge. Überprüfen Sie den Code, den wir unten erhalten haben.

UTD ERC20-TokenBild von U.Today

So starten Sie einen intelligenten Vertrag?

Sie wissen jetzt, wie Sie einfache intelligente Verträge für Solidity codieren. Versuchen wir zu verstehen, wie sie im Ethereum-Netzwerk gestartet werden können. Zuerst müssen wir den Code kompilieren. Zu diesem Zweck können Sie entweder den integrierten Compiler von Remix verwenden oder ihn mithilfe des Truffle-Frameworks auf Ihrem Computer ausführen. Gehen wir zuerst den einfachen Weg.

Bevor wir beginnen, müssen Sie ein Ethereum-Konto erstellen, falls Sie dies noch nicht getan haben. Zu diesem Zweck empfehlen wir die Verwendung der Metamask-Erweiterung, die auf den Browsern Chrome, Opera, Firefox und Brave installiert werden kann. Stellen Sie nach dem Erstellen einer Brieftasche sicher, dass Sie die Startphrase speichern, da dies die einzige Möglichkeit ist, von anderen Computern aus auf eine Brieftasche zuzugreifen oder die Erweiterung neu zu installieren. Der Vorteil von Metamask ist, dass Sie zwischen verschiedenen Netzwerken wechseln können. Dies wird sich als nützlich erweisen, da wir für unsere Experimente ein Testnetzwerk verwenden werden. Öffnen Sie die Erweiterung und wählen Sie Ropsten-Netzwerk. Dann gehen Sie zum Wasserhahn und fordern Sie eine ETH an. Denken Sie daran, dass jede Operation mit dem EVM Wei kostet.

Öffnen Sie remix.ethereum.org. Sie sehen einen Code für einen Stimmzettel – schließen Sie die Registerkarte damit. Remix verfügt über einen dedizierten Browser für Sol-Dateien und einen integrierten Compiler. Oben im Browser befindet sich ein Kreuzsymbol, mit dem Sie neue Dateien erstellen können. Erstellen wir eine Datei und kopieren Sie unseren ersten intelligenten Vertrag mit Fahrzeugen und deren Leistung. Im rechten Teil des Bildschirms sehen Sie den Compiler mit einigen Registerkarten. Wählen Sie auf der ersten Registerkarte eine Compilerversion aus, die der von Ihnen angegebenen Solidity-Version entspricht, und starten Sie den Kompilierungsprozess. Wenn keine Fehler vorliegen, wird eine Erfolgsmeldung angezeigt. Wählen Sie die zweite Registerkarte und Sie sehen einen Abschnitt, in dem Sie eine geeignete Umgebung (in unserem Fall Web3) angeben und überprüfen sollten, ob Ihre Adresse korrekt ist (sie sollte von Metamask stammen). Wenn alles korrekt ist, klicken Sie auf “Bereitstellen” und Sie erhalten ein Popup von Metamask mit einer Transaktion. Bestätigen Sie dies und voila, Ihr Smart-Vertrag wird im Netzwerk bereitgestellt.

Nun zu etwas Interessanterem. Wenn Sie zum Schreiben des Codes einen Texteditor auf Ihrem Computer verwendet haben, können Sie ihn mithilfe von Node.js lokal bereitstellen. Laden Sie es zunächst von der offiziellen Website herunter oder installieren Sie es über eine Befehlszeile (Windows) oder ein Terminal (OSX). In unserem Fall werden wir OSX verwenden, aber der Prozess ist ähnlich.

Installieren von Node.js.Bild von U.Today

Zweitens installieren Sie den Solidity Framework Truffle über “npm install”..

Trüffel installierenBild von U.Today

Drittens erstellen Sie einen neuen Ordner und erstellen ein Repo über den Befehl “init”.

Erstellen eines Trüffel-ReposBild von U.Today

Viertens installieren Sie HDWalletProvider auch über Node.js in diesem Repo.

HDWalletProvider installierenBild von U.Today

Fünftens: Kopieren Sie Dateien mit der ERC20-Schnittstelle und Ihrem Token-Vertrag in den Ordner “Verträge” in Ihrem Repo. Sechstens: Erstellen Sie die folgende JavaScript-Datei in Ihrem Ordner “Migrations” im Repo.

JS-BereitstellungsdateiBild von U.Today

Siebtens müssen Sie Ihre Trüffel-Konfigurationsdatei ändern. Zuvor ist jedoch ein zusätzlicher Schritt erforderlich. Sie geben die Mnemonik Ihrer Brieftasche (die Sie zuvor gespeichert haben) und eine API für Ropsten testnet ein. Um letzteres zu erhalten, gehen Sie zu Infura und registrieren Sie ein Projekt. Auf der Projektseite sehen Sie die ID. Verwenden Sie es als API.

TrüffelkonfigurationBild von U.Today

Endlich können Sie Ihren Smart-Vertrag starten. So sehen der Befehl und der Prozess aus. Sollten Probleme auftreten, werden diese stattdessen angezeigt.

Smart Contract wird lokal bereitgestelltBild von U.Today

Was können Sie mit einem intelligenten Vertrag tun??

Gute Arbeit, Sie haben die ersten beiden intelligenten Verträge bereitgestellt. Was jetzt? Für den Anfang müssen Sie sie überprüfen und veröffentlichen. Lassen Sie uns sie zuerst in einem der Blockforscher von Ethereum finden. Wir werden verwenden Etherscan.

Der schnellste Weg, um auf Ihre Verträge zuzugreifen, sind die Transaktionen aus Ihrer Brieftasche. Greifen Sie auf Metamask zu, drücken Sie drei Punkte, um Ihr Konto in Etherscan anzuzeigen. Ihre Adresse verfügt jetzt über mindestens eine Transaktion zur Vertragserstellung. Wenn Sie auf eine Transaktion zugreifen, finden Sie eine Zieladresse, bei der es sich im Wesentlichen um die Adresse eines Vertrags handelt. Sobald Sie auf der Vertragsseite gelandet sind, werden einige Registerkarten angezeigt. Gehen Sie zur Registerkarte “Code” und fahren Sie mit der Bestätigungsseite fort. Geben Sie hier alle relevanten Informationen ein und drücken Sie die Taste, um den Überprüfungsprozess zu starten.

CodeüberprüfungBild von U.Today

Nachdem Sie den ersten von uns erstellten Smart-Vertrag überprüft haben, können Sie jetzt mit ihm interagieren. Gehen Sie zur Registerkarte “Vertrag schreiben” und Sie sehen die von uns angegebenen Platzhalter. Verbinden wir Etherscan mit Metamask und geben Toyota Soarer und 280 PS ein. Aktualisieren Sie die Seite und Sie sehen die Daten im Abschnitt “Lesen”.

Smart Contract funktioniertBild von U.Today

Zusammenfassung

Zusammenfassend ist das Erstellen intelligenter Verträge eine notwendige Fähigkeit für jeden Blockchain-Ingenieur da draußen. Die erste Plattform zur Einführung intelligenter Verträge war Ethereum. Die Stiftung präsentierte der Community auch eine speziell geschriebene Sprache namens Solidity. Trotz der Neuheit des Konzepts und der Sprache selbst hat der Aufbau intelligenter Verträge nichts Außergewöhnliches. Personen, die bereits Erfahrung mit objektorientierten Programmiersprachen, insbesondere JavaScript, haben, werden sich sehr wohl fühlen.

Intelligente Verträge sind nur Programme, weisen jedoch Besonderheiten auf, die jeder Entwickler berücksichtigen sollte. Da beispielsweise intelligente Verträge auf einer dezentralen VM ausgeführt werden, werden ihre Daten unveränderlich in der Blockchain aufgezeichnet. Daher gibt es keinen Raum für Fehler, und das Testen eines intelligenten Vertrags ist entscheidend, bevor er im Hauptnetzwerk bereitgestellt wird. Ein weiteres Merkmal eines intelligenten Vertrags ist, dass jede Aktion über Transaktionen ausgeführt wird, für die die Verarbeitungsleistung des EVM erforderlich ist. Infolgedessen kostet die Bereitstellung intelligenter Verträge und deren Interaktion Geld.

Heute haben wir die Funktionsprinzipien für Ethereum Main- und Testnetzwerke erläutert, Ihnen verschiedene Tools zum Erstellen intelligenter Verträge gezeigt und den Prozess zum Erstellen von zwei Arten von Verträgen beschrieben. Wir haben auch verschiedene Möglichkeiten aufgezeigt, intelligente Verträge im Netzwerk zu starten und mit ihnen weiter zu interagieren. Wir glauben, dass Sie mit diesem Wissen bereit sind, als Blockchain-Ingenieur zu beginnen und auf dieser Grundlage außergewöhnliche intelligente Verträge und dezentrale Apps zu erstellen. Genießen!