Упражнение. Создание смарт-контракта

Завершено

В рамках этого урока мы добавим новый смарт-контракт к созданному ранее проекту newSolidityProject.

Создание контракта доставки

Смарт-контракт, который вы сейчас создадите, позволяет отслеживать состояние элементов, приобретенных в Интернет-магазине. При создании контракта устанавливается состояние доставки Pending. При отправке элемента устанавливается состояние доставки Shipped и создается соответствующее событие. После доставки для элемента устанавливается состояние доставки Delivered и создается другое событие.

Чтобы начать это упражнение, сделайте следующее:

  1. В созданном ранее проекте перейдите к каталогу contracts, щелкните правой кнопкой мыши папку, выберите действие создания файла и введите для него имя Shipping.sol.

  2. Скопируйте приведенное ниже содержимое контракта и вставьте его в новый файл.

    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. Просмотрите контракт и изучите сведения о том, какие задачи выполняются с его помощью. Убедитесь, что вы можете успешно создать контракт.

  4. На панели обозревателя щелкните имя контракта правой кнопкой мыши и выберите элемент Build Contracts (Компилировать контракты), чтобы скомпилировать смарт-контракт.

Добавление миграции

Теперь добавьте файл миграции, чтобы получить возможность развернуть контракт в сети Ethereum.

  1. В области обозревателя наведите указатель мыши на папку migrations и выберите элемент New File (Новый файл). Назовите файл 2_Shipping.js.

  2. Добавьте в этот файл следующий код:

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

Развернуть

Теперь убедитесь, что вы можете успешно развернуть контракт, прежде чем продолжать работу. Для этого щелкните имя контракта правой кнопкой мыши и выберите элемент Deploy Contracts (Развернуть контракты). В появившемся окне выберите элемент development (разработка) и дождитесь завершения развертывания.

Просмотрите сведения в окне выходных данных. Найдите развертывание 2_Shipping.js.

Screenshot showing the output window for the shipping contract migration.