Wie schreibe ich meinen ersten Smart Contract?



Lernen Sie die Grundlagen der intelligenten Vertragsentwicklung kennen und schreiben Sie Ihren ersten intelligenten Vertrag. Sie wissen auch, wie Sie den Smart-Vertrag testen.

In dem Sie haben gelernt, was Smart Contracts sind, verschiedene Smart Contract-Sprachen und wie Sie eine Smart Contract Development-Umgebung einrichten. In diesem Artikel erfahren Sie, wie Sie Ihren ersten intelligenten Vertrag erstellen. Ich werde verwendenRemix IDE zum Entwickeln und Testen eines intelligenten Vertrags.

Die folgenden Themen werden in diesem Tutorial zur intelligenten Vertragsentwicklung behandelt:





Erstellen Sie Ihren intelligenten Vertrag

Im Rahmen dieser Blog-Reihe wird ein einfacher Smart-Vertrag für Bestellungen entwickelt. Im Verlauf dieser Reihe und mit der Einführung neuer Konzepte der Solidity-Programmiersprache wird sich der Smart Contract für Bestellungen weiterentwickeln und verbessern.



Struktur eines intelligenten Vertrags

Solidity Smart Contract ist im Wesentlichen eine Sammlung von folgenden

  • Daten - die den aktuellen Vertragsstand beibehält
  • Funktion - die die Logik anwenden, um den Vertragszustand zu ändern

Solidity Smart Contracts folgen einer Standardstruktur. Jeder Smart-Vertrag beginnt mit der folgenden Aussage



Pragma-Richtlinie

Das Schlüsselwort 'pragma' kann verwendet werden, um bestimmte Compilerfunktionen oder -prüfungen zu aktivieren. Die folgende Anweisung definiert, dass die Quelldatei (Smart Contract) nicht mit dem Compiler vor 0.4.0 und der Compilerversion nach 0.6.0 kompiliert wird. Diese Deklaration stellt sicher, dass kein unbeabsichtigtes Verhalten eingeführt wird, wenn eine neue Compilerversion eingeführt wird.

Pragma-Solidität> = 0,4,0<=0.6.0 

Vertragserklärung

Der Vertrag wird mit dem Schlüsselwort „Vertrag“ deklariert. Dies deklariert einen leeren Vertrag, der mit dem Namen 'PurchaseOrder' gekennzeichnet ist.

Vertrag PurchaseOrder {}

Speichern relevanter Daten im Vertrag

In jedem Vertrag oder allgemein in jedem Programm müssen möglicherweise einige Daten gespeichert werden. Das Hinzufügen von Daten zum Programm bietet ihm ein gewisses Maß an Flexibilität. Die Abkehr von fest codierten Werten im Programm zu vom Benutzer bereitgestellten Werten ist ein wichtiges Merkmal. Mit Variablen können Sie die Daten speichern, beschriften, abrufen und bearbeiten.

Intelligente Vertragsentwicklung: Einführung von Variablen

In der Solidität gibt es zwei Arten von Variablen

  1. Werttyp: Diese Art von Variablen wird als Wert übergeben, d. H. Sie werden immer kopiert, wenn sie als Funktionsargumente oder in Zuweisungen verwendet werden. Zum Beispiel: Ganzzahlen, Boolesche Adresse usw.
  2. Referenztypen: Diese Variablentypen sind komplexe Typen und werden als Referenz übergeben. Diese Variablen passen nicht in 256-Bit-Dateien und müssen sorgfältig verwaltet werden, da das Kopieren teuer ist.

Hinzufügen von Daten zu Smart Contract

Fügen wir dem Vertrag eine Datenvariable hinzu. Für jede Bestellung muss eine bestimmte Produktmenge vorhanden sein. Fügen wir eine Variable product_quantity hinzu, die vom Datentyp Integer oder Number ist.

Übertragen Sie Dateien auf die ec2 Windows-Instanz

Die Variable, die wir jetzt einführen, ist eine Ganzzahl ohne Vorzeichen und wird durch uint256 dargestellt. 256 bezeichnet hier den 256-Bit-Speicher.

  • U - ohne Vorzeichen (Dies bedeutet, dass dieser Typ nur positive Ganzzahlen darstellen kann, keine positiven und negativen Ganzzahlen.)
  • INT - Ganzzahl
  • 256 - 256 Bit groß
  • Der Mindestwert, den uint256 zugewiesen werden kann, ist 0
  • Maximalwert uint256 kann zugewiesen werden ist 2 ^ 256-1 [eine sehr große Zahl]

Die Produktmenge ist nur ein positiver Wert, und derzeit wird davon ausgegangen, dass wir einen sehr großen Wert für die Produktmenge berücksichtigen werden.

Breite erster Suchalgorithmus Pseudocode

Die deklarierte Variable 'product_quantity' ist Teil des Vertragsstatus und wird daher beibehalten oder im Vertragsbereich gespeichert. Derzeit ist diese Variable standardmäßig auf den Wert 0 eingestellt.

Vertrag PurchaseOrder {uint256 product_quantity}

Konstruktor definieren

Der Konstruktor wird aufgerufen, wenn der Vertrag bereitgestellt wird. Der Konstruktor initialisiert den Vertrag mit einigen Werten. Im aktuellen Szenario wird die Produktmenge bei Bereitstellung des Vertrags auf 100 festgelegt. Ein parametrisierter Konstruktor kann auch erstellt werden, indem eine Variable übergeben und product_quantity mit dem übergebenen Wert initialisiert wird.

Der hier zu beachtende Schlüsselpunkt ist der dem Konstruktor zugeordnete Zugriffsmodifikator 'public'. Das öffentliche Schlüsselwort gibt an, dass jeder auf diese Funktion zugreifen kann. Dies ist keine eingeschränkte Funktion.

constructor () public {product_quantity = 100}

Funktionen hinzufügen

Fügen wir nun eine Funktion hinzu, um unser Programm interaktiv zu gestalten. Funktionen sind gesteuerte Funktionen, die einem Programm hinzugefügt werden können. Jeder Funktion geht eine Schlüsselwortfunktion voraus. Insgesamt sieht die Funktionsdeklaration so aus'' Funktion ”.

Funktion abrufen

Eine der häufigsten Anforderungen für jedes Programm ist das Lesen des gespeicherten Werts. Im folgenden Vertrag müssen wir den Wert 'product_quantity' lesen. Um diese Funktion bereitzustellen, wird eine Lesefunktion oder eine Get-Funktion hinzugefügt. In dieser Funktion manipulieren wir den gespeicherten Wert nicht, sondern rufen nur den gespeicherten Wert ab.

Lassen Sie uns nun unsere get-Funktion (get_quantity) aufschlüsseln.

Nein. Stichwort Wert
ein get_quantity (){Es werden keine Parameter übergeben}
2 Öffentlichkeit{Jeder kann auf die Funktion zugreifen}
3 Aussicht{bedeutet, dass die Funktion nur den Vertragsstatus liest, den Vertragsstatus nicht ändert, daher Ansicht}
4 gibt eine Variable vom Typ uint256 zurück {definiert, was von der Funktion zurückgegeben wird}
Funktion get_quantity () public view gibt zurück (uint256) {return product_quantity}

Setterfunktionen

Das Lesen der Daten ist notwendig und wir haben es im letzten Abschnitt erreicht, aber der größte Teil des Szenarios erfordert auch die Fähigkeit, die Daten zu schreiben / zu aktualisieren. Diese spezielle Funktion wird durch Hinzufügen einer Setterfunktion bereitgestellt. Diese Funktion übernimmt vom Benutzer einen Wert in Form eines Eingabeparameters. Unter Verwendung des vom Benutzer für die Funktion bereitgestellten Werts wird der Wert der Variablen 'product_quantity' in / aktualisiert.

Lassen Sie uns nun unsere Set-Funktion (update_quantity) aufschlüsseln.

Hinzufügen einer Funktion zum Aktualisieren des Werts der Produktmenge

Nein. Stichwort Wert
ein update_quantity (Wert uint256){Parameterwert vom Typ uint256 wird übergeben}
2 Öffentlichkeit{Jeder kann auf die Funktion zugreifen}
3 Nicht erforderlich, da der Status von den Funktionen aktualisiert wird
4 gibt eine Variable vom Typ uint256 zurück (definiert, was von der Funktion zurückgegeben wird)
Funktion update_quantity (uint256-Wert) public {product_quantity = product_quantity + value}

Wenn man all dies zusammenfügt, sollte der Gesamtvertrag so aussehen.

Pragma-Solidität> = 0,4,0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

Bereitstellen des Smart Contract

Zeit, den Smart-Vertrag zu testen. Um diesen intelligenten Vertrag zu testen, werden wir verwenden Remix Online IDE .

Remix ist ein Online-Spielplatz für Ethereum Smart Vertrag . Remix ist komplett browserbasiert. Remix bietet Ihnen eine Online-IDE (Integrated Development Environment), in der Sie Ihre intelligenten Verträge schreiben können. Remix bietet Ihnen eine Online-Solidity-Compiler-Funktion. Der Smart Contract in Remix IDE kann nahtlos mit einer bestimmten Compilerversion kompiliert werden.

Remix bietet auch die Möglichkeit, den Smart Contract schnell zu testen.

Remix bietet ein vollständiges Toolset, mit dem Sie mit der Entwicklung eines Smart Contract beginnen und den Smart Contract testen können, ohne eine Installation auf Ihrem lokalen Computer durchführen zu müssen. Dies ist von Anfang an von großem Nutzen, da sich Entwickler nur darauf konzentrieren müssen, einen intelligenten Vertrag zu schreiben, und sich eher um die Infrastruktur sorgen müssen.

Mit Remix IDE benötigen Sie lediglich einen Browser und eine Internetverbindung, um mit der intelligenten Vertragsentwicklung zu beginnen. Schnelle Entwicklung, Prüfung und Validierung einer Idee für einen intelligenten Vertrag.

Remix hat kürzlich seine Benutzeroberfläche aktualisiert.

Remix-UI-Smart-Contracts-Edureka

Klicken Sie auf das im obigen Bild hervorgehobene Dateisymbol. Der Datei-Explorer wird geöffnet.

  1. Durch Klicken auf das Plus-Symbol kann eine neue Datei erstellt werden. Benennen Sie die Datei PurchaseOrder.sol
  2. Dadurch wird eine leere Datei mit dem Namen PurchaseOrder.sol erstellt. Klicken Sie auf und öffnen Sie diese Datei.
  3. Lassen Sie uns den gesamten Vertrag kopieren und in PurchaseOrder.sol einfügen.
  4. Klicken Sie auf das zweite Symbol. Im linken Menü direkt unter dem Dateisymbol sollte die Solidity Compiler-Option angezeigt werden.
  5. Wählen Sie unter der Bezeichnung Compiler die Compilerversion aus. Die aktuell ausgewählte Version ist 0.5.8.
  6. Klicken Sie nach der Auswahl der Compilerversion auf 'Compile PurchaseOrder.sol'. Dadurch wird der Smart-Vertrag erstellt.

7. Wenn der Smart-Vertrag erfolgreich kompiliert wurde, klicken Sie auf die Schaltfläche „Kompilierungsdetails“. Die folgenden Details sollten angezeigt werden. Nach der Kompilierung werden zwei wichtige Informationen zur Verfügung gestellt

in c ++ sortieren
    • ABI - Anwendungsbinärschnittstelle. Dies ist eine JSON-Datei, in der alle im Smart Contract enthaltenen Methoden sowie Metadaten der Methoden aufgeführt sind. Mehr dazu wird in den folgenden Blogs diskutiert.
    • Bytecode- EVM-Operationscode (Ethereum Virtual Machine), Smart Contract Logic wird beim Kompilieren in den Bytecode konvertiert.

8. Um den Smart-Vertrag zu testen, muss der Smart-Vertrag bereitgestellt werden. Um den Smart Contract bereitzustellen, klicken Sie auf das nächste Symbol im linken Menü unter dem Kompilierungssymbol. Der folgende Bildschirm wird angezeigt. Um den Smart-Vertrag zu testen, muss der Smart-Vertrag bereitgestellt werden. Um den Smart Contract bereitzustellen, klicken Sie auf das nächste Symbol im linken Menü unter dem Kompilierungssymbol. Der folgende Bildschirm wird angezeigt.

Bereitstellungsoption

Der Bereitstellungsbildschirm bietet einige Auswahlmöglichkeiten. Lassen Sie uns diese nacheinander betrachten.

  • Umgebung: Dies kann als eine Option angesehen werden, die der Wahl eines Laptops bei Amazon, Flipkart oder Newegg (alle diese sind Online-Händler) ähnelt. Sie treffen je nach Ihren Anforderungen eine Auswahl, bei der Sie kaufen möchten. In ähnlicher Weise haben wir im Falle von Remix die Möglichkeit, den Smart-Vertrag bereitzustellen und den Smart-Vertrag zu testen. Das Dropdown-Menü neben der Umgebungsbezeichnung bietet drei Auswahlmöglichkeiten
    • JavaScript-VM - Ein lokaler Ethereum-Einzelknoten wird im Browserspeicher hochgefahren und bietet 5 vorfinanzierte Testkonten, die für die Transaktion verwendet werden können (Bereitstellung, Aufrufen von Funktionen).
    • Injected Web3 Provide - Dies basiert auf MetaMask. Metamask ist wie ein Broker oder Vermittler, der es den Webanwendungen ermöglicht, mit dem Smart Contract zu interagieren. Metamask bietet die Möglichkeit, die Identitäten zu verwalten und die Transaktionen zu signieren, die an das Ethereum-Netzwerk gesendet werden sollen. Dieser Mittelsmann oder 3rdDie Partei bietet Ihnen Hilfe bei der Bestimmung des Blockchain-Netzwerks, in dem der Smart-Vertrag bereitgestellt wird.
    • Web3-Anbieter - Wenn Sie einen lokalen Ethereum-Knoten ausführen und ein RPC-Endpunkt verfügbar ist, kann diese Option verwendet werden. Smart Contract wird auf dem lokalen Ethereum-Knoten bereitgestellt.
  • Konten: Diese Informationen werden basierend auf der ausgewählten Umgebung ausgefüllt. Beispielsweise. JavaScript VM bietet 5 vorfinanzierte Testkonten. Bei Web3-Provider und Injected Web3 werden keine vorfinanzierten Testkonten bereitgestellt.
  • Gaslimit: Dies definiert die maximale Menge an Gas, die der Initiator für jede Transaktion ausgeben möchte. Dies ist der Ort, um sich vor einer Endlosschleife zu schützen und im Falle einer Endlosschleife alle Guthaben des Kontos zu erschöpfen.
  • Wert: Der Wert, der möglicherweise während der Bereitstellung des Smart-Vertrags gesendet werden muss. Dies ist ein optionaler Wert.

Um den Vertrag bereitzustellen, wählen Sie die Option JavaScript VM, wählen Sie das erste Konto aus der Dropdown-Liste Konten aus und notieren Sie den Kontostand (100 Ether).

Stellen Sie sicher, dass der Name des Smart-Vertrags PurchaseOrder lautet, und klicken Sie auf Bereitstellen. Schlüsselaktionen, die passieren werden

  1. Der Kontostand ändert sich von 100 Ether auf 99,999999 Ether. Der abgezogene Betrag entspricht den Transaktionskosten für die Bereitstellung des Smart-Vertrags.
  2. Unter 'Bereitgestellter Vertrag' wird eine neue Kachel für den intelligenten Vertrag angezeigt, die auch die Adresse des neuen intelligenten Vertrags enthält.0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. Im Konsolenfenster werden folgende Informationen angezeigt
    1. Transaktions-Hash - Identifiziert die Vertragsbereitstellung eindeutig
    2. Transaktionsgebühr
    3. Vertragsadresse

Interaktion mit dem bereitgestellten Vertrag

  1. Im Rahmen des bereitgestellten Vertrags stehen die folgenden zwei Interaktionsmethoden zur Verfügung: update_quantity und get_quantity.
  2. Beide Interaktionsmethoden sind die öffentlichen Methoden, die im Vertrag „Bestellung“ definiert sind.
  3. Aktualisierungsmenge Die Methode 'update_quantity' erfordert einen Eingabeparameter, daher das Eingabefeld.
  4. Methode abrufen Mit der Methode 'get_quantity' wird der Wert von product_quantity abgerufen.
  5. Lassen Sie uns überprüfen, was passiert, wenn get_quantity aufgerufen wird. Der Rückgabewert 100 wird angezeigt, der im Konstruktor initialisiert wurde. Dies führt nicht zu einer Transaktion
  6. Rufen Sie update_quantity auf und geben Sie 30 als Eingabe an. Dies führt zu einer Transaktion

Kurz gesagt, jede Operation, die eine Schreiboperation in den Vertragszustand bewirkt (d. H. Die Vertragsvariablen ändert), führt zu einer Transaktion.

Jede Operation, die nur den Status des Vertrags liest, verursacht keine Transaktion.

Abschluss einer intelligenten Vertragsentwicklung

Damit haben wir gerade unseren ersten intelligenten Vertrag erstellt, der nur die Oberfläche der Solidität zerkratzt. Wir haben gerade gesehen, was es braucht, um den Smart-Vertrag von der Bereitstellung des Smart-Vertrags bis zur Initiierung von Transaktionen zu testen.

Im nächsten Blog, der eine Fortsetzung der Reihe zur Entwicklung intelligenter Verträge darstellt, werden wir uns eingehender mit den Grundlagen der Solidität befassen und uns eingehender mit der Bereitstellung intelligenter Verträge befassen.

Damit schließe ich dies ab Smart Contract Entwicklungsblog. Ich hoffe, Sie haben diesen Blog genossen und fanden ihn informativ.

ichWenn Sie Smart Contracts erlernen, eine Karriere im Bereich Blockchain aufbauen und Fachkenntnisse in der Ethereum-Programmierung erwerben möchten, melden Sie sich live online an Hier finden Sie rund um die Uhr Unterstützung, die Sie während Ihrer gesamten Lernphase begleitet.

Hast du eine Frage an uns? Bitte erwähnen Sie dies im Kommentarbereich von „Intelligente Vertragsentwicklung“. Wir werden uns umgehend bei Ihnen meldenst.