Übung: Schreiben eines Smart Contract

Abgeschlossen

In dieser Einheit fügen wir dem zuvor erstellten newSolidityProject einen neuen Smart Contract hinzu.

Erstellen eines Versandvertrags

Mit dem Smart Contract, den Sie erstellen, wird der Status der auf einem Onlinemarketplace erworbenen Artikel nachverfolgt. Wenn der Vertrag erstellt wird, wird der Versandstatus auf Pending festgelegt. Wenn ein Artikel versandt wird, wird der Versandstatus auf Shipped festgelegt und ein Ereignis ausgegeben. Bei der Lieferung wird der Versandstatus des Artikels auf Delivered festgelegt und ein anderes Ereignis ausgegeben.

So starten Sie diese Übung:

  1. Klicken Sie im Projekt, das Sie erstellt haben, im Verzeichnis contracts mit der rechten Maustaste auf den Ordner, und wählen Sie aus, dass eine neue Datei namens Shipping.sol erstellt werden soll.

  2. Kopieren Sie den folgenden Vertragsinhalt, und fügen Sie ihn in der neuen Datei hinzu.

    pragma solidity >=0.4.25 <0.9.0;
    
    contract Shipping {
        // Our predefined values for shipping listed as enums
        enum ShippingStatus { Pending, Shipped, Delivered }
    
        // Save enum ShippingStatus in variable status
        ShippingStatus private status;
    
        // Event to launch when package has arrived
        event LogNewAlert(string description);
    
        // This initializes our contract state (sets enum to Pending once the program starts)
        constructor() public {
            status = ShippingStatus.Pending;
        }
        // Function to change to Shipped
        function Shipped() public {
            status = ShippingStatus.Shipped;
            emit LogNewAlert("Your package has been shipped");
        }
    
        // Function to change to Delivered
        function Delivered() public {
            status = ShippingStatus.Delivered;
            emit LogNewAlert("Your package has arrived");
        }
    
        // Function to get the status of the shipping
        function getStatus(ShippingStatus _status) internal pure returns (string memory) {
         // Check the current status and return the correct name
         if (ShippingStatus.Pending == _status) return "Pending";
         if (ShippingStatus.Shipped == _status) return "Shipped";
         if (ShippingStatus.Delivered == _status) return "Delivered";
        }
    
       // Get status of your shipped item
        function Status() public view returns (string memory) {
             ShippingStatus _status = status;
             return getStatus(_status);
        }
    }
    
  3. Schauen Sie sich den Vertrag an, um zu sehen, was passiert. Vergewissern Sie sich, dass der Vertrag erfolgreich erstellt werden kann.

  4. Klicken Sie im Explorer-Bereich mit der rechten Maustaste auf den Vertragsnamen, und wählen Sie Verträge erstellen aus, um den Smart Contract zu kompilieren.

Hinzufügen einer Migration

Nun fügen wir eine Migrationsdatei hinzu, damit wir den Vertrag im Ethereum-Netzwerk bereitstellen können.

  1. Zeigen Sie im Explorer-Bereich auf den Ordner migrations, und wählen Sie Neue Datei aus. Geben Sie der Datei den Namen 2_Shipping.js.

  2. Fügen Sie der Datei folgenden Code hinzu:

    const Shipping = artifacts.require("Shipping");
    
    module.exports = function (deployer) {
      deployer.deploy(Shipping);
    };
    

Bereitstellen

Stellen Sie als nächstes sicher, dass Sie den Vertrag erfolgreich bereitstellen können, bevor Sie fortfahren. Klicken Sie mit der rechten Maustaste auf den Vertragsnamen, und wählen Sie Verträge bereitstellen aus. Wählen Sie im angezeigten Fenster Entwicklung aus, und warten Sie, bis die Bereitstellung abgeschlossen ist.

Sehen Sie sich die Informationen im Ausgabefenster an. Suchen Sie nach einer Bereitstellung von 2_Shipping.js.

Screenshot showing the output window for the shipping contract migration.