Упражнение. Создание смарт-контракта
В рамках этого урока мы добавим новый смарт-контракт к созданному ранее проекту newSolidityProject.
Создание контракта доставки
Смарт-контракт, который вы сейчас создадите, позволяет отслеживать состояние элементов, приобретенных в Интернет-магазине. При создании контракта устанавливается состояние доставки Pending
. При отправке элемента устанавливается состояние доставки Shipped
и создается соответствующее событие. После доставки для элемента устанавливается состояние доставки Delivered
и создается другое событие.
Чтобы начать это упражнение, сделайте следующее:
В созданном ранее проекте перейдите к каталогу contracts, щелкните правой кнопкой мыши папку, выберите действие создания файла и введите для него имя Shipping.sol.
Скопируйте приведенное ниже содержимое контракта и вставьте его в новый файл.
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); } }
Просмотрите контракт и изучите сведения о том, какие задачи выполняются с его помощью. Убедитесь, что вы можете успешно создать контракт.
На панели обозревателя щелкните имя контракта правой кнопкой мыши и выберите элемент Build Contracts (Компилировать контракты), чтобы скомпилировать смарт-контракт.
Добавление миграции
Теперь добавьте файл миграции, чтобы получить возможность развернуть контракт в сети Ethereum.
В области обозревателя наведите указатель мыши на папку migrations и выберите элемент New File (Новый файл). Назовите файл 2_Shipping.js.
Добавьте в этот файл следующий код:
const Shipping = artifacts.require("Shipping"); module.exports = function (deployer) { deployer.deploy(Shipping); };
Развернуть
Теперь убедитесь, что вы можете успешно развернуть контракт, прежде чем продолжать работу. Для этого щелкните имя контракта правой кнопкой мыши и выберите элемент Deploy Contracts (Развернуть контракты). В появившемся окне выберите элемент development (разработка) и дождитесь завершения развертывания.
Просмотрите сведения в окне выходных данных. Найдите развертывание 2_Shipping.js.