Как написать свой первый смарт-контракт?



Изучите основы разработки смарт-контрактов и начните писать свой первый смарт-контракт. Вы также узнаете, как протестировать смарт-контракт.

в , вы узнали о смарт-контрактах, различных языках смарт-контрактов и о том, как настроить среду разработки смарт-контрактов. В этой статье вы узнаете, как создать свой первый смарт-контракт. Я буду использоватьРемикс IDE для разработки и тестирования смарт-контракта.

В этом руководстве по разработке смарт-контрактов рассматриваются следующие темы:





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

В рамках этой серии блогов будет разработан простой смарт-контракт для заказа на покупку. По мере развития этой серии и внедрения новых концепций языка программирования Solidity смарт-контракт заказа на поставку будет развиваться и улучшаться.



Структура смарт-контракта

Смарт-контракт Solidity, по сути, представляет собой набор следующих

  • данные - который поддерживает текущее состояние контракта
  • функция - которые применяют логику для перехода состояния контракта

Смарт-контракты Solidity имеют стандартную структуру. Любой смарт-контракт начинается со следующего утверждения



Директива Pragma

Ключевое слово «pragma» может использоваться для включения определенных функций или проверок компилятора. В приведенном ниже утверждении определяется, что исходный файл (смарт-контракт) не будет компилироваться с компилятором до 0.4.0 и версией компилятора после 0.6.0. Это объявление гарантирует отсутствие непреднамеренного поведения при представлении новой версии компилятора.

прагма солидность> = 0.4.0<=0.6.0 

Декларация договора

Контракт объявляется с использованием ключевого слова «контракт». Это объявляет пустой контракт, который идентифицируется именем «PurchaseOrder».

контракт PurchaseOrder {}

Хранение релевантных данных к контракту

Каждый контракт или в общих чертах каждая программа может потребовать хранить некоторые данные. Добавление данных в программу обеспечивает определенный уровень гибкости. Важной особенностью является переход от жестко заданных значений в программе к значениям, заданным пользователем. Переменные позволяют хранить данные, маркировать данные, извлекать данные и манипулировать данными.

Разработка смарт-контрактов: введение переменных

В твердости переменные бывают двух типов

  1. Тип значения: Переменные этого типа передаются по значению, т.е. они всегда копируются, когда используются в качестве аргументов функции или в присваиваниях. Например: целые числа, логический адрес и т. Д.
  2. Типы справок: Переменные этого типа относятся к сложным типам и передаются по ссылке, эти переменные не умещаются в 256-битном формате и требуют осторожного обращения, поскольку их копирование обходится дорого.

Добавление данных в смарт-контракт

Давайте добавим в контракт переменную данных. Для каждого заказа на поставку должно быть определенное количество продукта, связанного с ним. Добавим переменную product_quantity, которая будет иметь тип данных integer или number.

java что такое вектор

Переменная, которую мы сейчас представляем, является целым числом без знака и представлена ​​как uint256, 256 здесь означает 256-битное хранилище.

  • U - беззнаковый (это означает, что этот тип может представлять только положительные целые числа, а не положительные и отрицательные целые числа)
  • INT - целое число
  • 256 - 256 бит размером
  • минимальное значение uint256 может быть присвоено 0
  • максимальное значение uint256 может быть присвоено 2 ^ 256-1 [очень большое число]

Количество продукта - это только положительное значение, и текущее предположение состоит в том, что мы собираемся удовлетворить очень большое значение количества продукта.

Объявленная переменная product_quantity является частью состояния контракта и, следовательно, сохраняется или хранится в пространстве контракта. В настоящее время значение этой переменной по умолчанию равно 0.

контракт PurchaseOrder {uint256 product_quantity}

Определение конструктора

Конструктор вызывается при развертывании контракта. Конструктор инициализирует контракт с некоторыми значениями. В текущем сценарии количество продукта установлено на 100 при развертывании контракта. Параметризованный конструктор также может быть создан путем передачи переменной и инициализации product_quantity с использованием переданного значения.

Ключевым моментом, который следует здесь отметить, является модификатор доступа «public», связанный с конструктором. Ключевое слово Public указывает, что любой может получить доступ к этой функции, это не ограниченная функция.

constructor () public {product_quantity = 100}

Добавление функций

Давайте теперь добавим функцию, чтобы сделать нашу программу интерактивной. Функции - это контролируемые возможности, которые могут быть добавлены в программу. Любой функции предшествует ключевое слово function. В целом так выглядит объявление функции' функция ».

Получить функцию

Одним из наиболее распространенных требований для любой программы является чтение сохраненного значения. В следующем контракте нам нужно будет прочитать значение product_quantity. Чтобы обеспечить эту возможность, добавляется функция чтения или функция получения. В этой функции мы не делаем никаких манипуляций с сохраненным значением, мы просто получаем сохраненное значение.

степенная функция в Java для целых чисел

Давайте теперь разберем нашу функцию get (get_quantity)

Нет. Ключевое слово Ценность
один get_quantity (){параметры не передаются}
2 общественный{любой может получить доступ к функции}
3 Посмотреть{означает, что функция только читает состояние контракта, не изменяет состояние контракта, следовательно, просмотр}
4 возвращает переменную типа uint256 {определяется, что возвращает функция}
функция get_quantity () публичное представление возвращает (uint256) {return product_quantity}

Функции сеттера

Чтение данных необходимо, и мы выполнили это в последнем разделе, но для большей части сценария также требуется возможность записи / обновления данных. Эта особая возможность обеспечивается добавлением функции установки. Эта функция принимает значение от пользователя в виде входного параметра. Используя значение, предоставленное функции пользователем, значение переменной product_quantity записывается / обновляется.

Давайте теперь разберем нашу заданную функцию (update_quantity)

Добавление функции для обновления значения количества товара

Нет. Ключевое слово Ценность
один update_quantity (значение uint256){передается значение параметра типа uint256}
2 общественный{любой может получить доступ к функции}
3 Не требуется, так как состояние обновляется функциями
4 возвращает переменную типа uint256 (определяется, что возвращает функция)
функция update_quantity (значение uint256) public {product_quantity = product_quantity + value}

Если собрать все это вместе, вот как должен выглядеть общий контракт.

прагма солидность> = 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 } } 

Развертывание смарт-контракта

Пришло время протестировать смарт-контракт. Чтобы протестировать этот смарт-контракт, мы будем использовать Ремикс онлайн IDE .

Remix - это онлайн-площадка для смарт-контракт Ethereum . Ремикс полностью основан на браузере. Remix предоставляет вам онлайн-среду IDE (интегрированную среду разработки), где вы можете писать свои смарт-контракты. Remix предоставляет вам возможность онлайн-компилятора. Смарт-контракт в Remix IDE может быть легко скомпилирован с использованием конкретной версии компилятора.

Remix также предоставляет возможность быстро протестировать смарт-контракт.

Remix предоставляет полный набор инструментов для начала разработки смарт-контракта и модульного тестирования смарт-контракта без выполнения какой-либо установки на вашем локальном компьютере. Это очень полезно для начала с солидности, поскольку разработчикам просто нужно сосредоточиться на написании смарт-контракта, а не беспокоиться об инфраструктуре.

ng-change против onchange

С Remix IDE все, что вам нужно, - это браузер и подключение к Интернету, чтобы начать разработку смарт-контрактов. Быстрая разработка, тестирование и проверка идеи смарт-контракта.

Remix недавно обновил свой интерфейс.

Remix-UI-Smart-Contracts-Edureka

Щелкните значок файла, как выделено на изображении выше, откроется проводник.

  1. Нажав на значок плюса, можно создать новый файл, назовите его PurchaseOrder.sol
  2. Будет создан пустой файл с именем PurchaseOrder.sol, щелкните и откройте этот файл.
  3. Давайте скопируем и вставим весь контракт в PurchaseOrder.sol.
  4. Щелкните второй значок, в левом меню чуть ниже значка файла должна появиться опция компилятора Solidity.
  5. Под меткой Compiler выберите версию компилятора. Текущая выбранная версия - 0.5.8.
  6. После выбора версии компилятора нажмите «Скомпилировать PurchaseOrder.sol». Это скомпилирует смарт-контракт.

7. После успешной компиляции смарт-контракта нажмите кнопку «Сведения о компиляции», и должны появиться следующие сведения. После компиляции доступны две ключевые информации

    • ABI - двоичный интерфейс приложения. Это файл json, в котором подробно описаны все методы, представленные в смарт-контракте, а также метаданные методов. Подробнее об этом мы поговорим в следующих блогах.
    • Байт-код- Код операции EVM (виртуальная машина Ethereum), логика смарт-контракта преобразуется в байт-код при компиляции.

8. Чтобы протестировать смарт-контракт, смарт-контракт должен быть развернут. Чтобы развернуть смарт-контракт, щелкните следующий значок в левом меню под значком компиляции. Появится следующий экран. Чтобы протестировать смарт-контракт, смарт-контракт должен быть развернут. Чтобы развернуть смарт-контракт, щелкните следующий значок в левом меню под значком компиляции. Появится следующий экран.

Вариант развертывания

Экран развертывания предлагает несколько вариантов, давайте рассмотрим их один за другим.

  • Среда: это можно рассматривать как вариант, аналогичный выбору покупки ноутбука на Amazon, Flipkart, Newegg (все они являются интернет-магазином), вы выбираете, где вы хотите купить, исходя из ваших требований. Точно так же в случае Remix у нас есть возможность развернуть смарт-контракт и протестировать смарт-контракт. В раскрывающемся списке рядом с меткой среды можно выбрать три варианта.
    • Виртуальная машина JavaScript - локальный единый узел Ethereum запускается в памяти браузера и предоставляет 5 предварительно финансируемых тестовых учетных записей, которые могут использоваться для транзакции (развертывание, вызов функций)
    • Введенное Web3 Provide - полагается на MetaMask. Metamask похож на брокера или посредника, который позволяет веб-приложениям взаимодействовать со смарт-контрактом. Metamask предоставляет возможность управлять идентификаторами, а также подписывать транзакции для отправки в сеть Ethereum.rdСторона предоставляет помощь в определении сети блокчейнов, в которой будет развернут смарт-контракт.
    • Web3 Provider - этот вариант можно использовать, если вы используете локальный узел Ethereum и доступна конечная точка RPC. Смарт-контракт будет развернут на локальном узле Ethereum.
  • Учетные записи: эта информация заполняется в зависимости от выбранной среды. Например. Виртуальная машина JavaScript предоставляет 5 предварительно финансируемых тестовых учетных записей. В случае поставщика Web3 и Injected Web3 не предоставляют предварительно финансируемые тестовые счета.
  • Лимит газа: определяет максимальное количество газа, которое инициатор готов потратить на любую транзакцию. Это место для защиты от бесконечного цикла и исчерпания всех средств на счете в случае состояния бесконечного цикла.
  • Значение: значение, которое может потребоваться передать при развертывании смарт-контракта. Это необязательное значение.

Чтобы развернуть контракт, выберите вариант виртуальной машины JavaScript, выберите первую учетную запись в раскрывающемся списке учетных записей, обратите внимание на баланс учетной записи (100 эфиров).

Убедитесь, что имя смарт-контракта отображается как PurchaseOrder, щелкните по развертыванию. Ключевые действия, которые произойдут

  1. Баланс на счете изменяется со 100 эфиров на 99,999999 эфира, списанная сумма представляет собой стоимость транзакции для развертывания смарт-контракта.
  2. В развернутом контракте появится новая плитка для смарт-контракта, которая также предоставит адрес нового смарт-контракта примерно так (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. В окне консоли появится следующая информация
    1. Хеш транзакции - однозначно определяет развертывание контракта
    2. Стоимость сделки
    3. Адрес контракта

Взаимодействие с развернутым контрактом

  1. В развернутом контракте доступны следующие два метода взаимодействия update_quantity и get_quantity.
  2. Оба этих метода взаимодействия являются общедоступными, определенными в контракте «Заказ на поставку».
  3. Метод обновления количества «update_quantity» требует входного параметра, следовательно, поля ввода.
  4. Получить количество Метод «get_quantity» извлекает значение product_quantity.
  5. Проверим, что происходит при вызове get_quantity, отображается возвращаемое значение 100, которое было инициализировано в конструкторе. Это не вызывает транзакции
  6. Давайте вызовем update_quantity и предоставим 30 в качестве входных данных. Это вызывает транзакцию

Вкратце, любая операция, которая вызывает операцию записи в состояние контракта (т. Е. Изменяет переменные контракта), приведет к транзакции.

Любая операция, которая просто считывает состояние контракта, не вызывает транзакцию.

Заключение о разработке смарт-контракта

Таким образом, мы только что создали наш первый смарт-контракт, лишь слегка коснувшись поверхности надежности. Мы только что увидели, что нужно для тестирования смарт-контракта прямо от развертывания смарт-контракта до инициирования транзакций.

В следующем блоге, который является продолжением серии статей о разработке смарт-контрактов, мы собираемся более подробно остановиться на основах надежности и более глубоко погрузиться в развертывание смарт-контрактов.

На этом я заканчиваю это Смарт-контракт блог разработки. Надеюсь, вам понравилось читать этот блог и он оказался информативным.

яЕсли вы хотите изучить смарт-контракты, построить карьеру в области блокчейна и получить опыт программирования Ethereum, зарегистрируйтесь в онлайн-режиме Здесь вы получите круглосуточную поддержку, которая поможет вам на протяжении всего периода обучения.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев «Разработка смарт-контрактов», и мы свяжемся с вами в ближайшее время.ул.