в , вы узнали о смарт-контрактах, различных языках смарт-контрактов и о том, как настроить среду разработки смарт-контрактов. В этой статье вы узнаете, как создать свой первый смарт-контракт. Я буду использоватьРемикс IDE для разработки и тестирования смарт-контракта.
В этом руководстве по разработке смарт-контрактов рассматриваются следующие темы:
Создание смарт-контракта
В рамках этой серии блогов будет разработан простой смарт-контракт для заказа на покупку. По мере развития этой серии и внедрения новых концепций языка программирования Solidity смарт-контракт заказа на поставку будет развиваться и улучшаться.
Структура смарт-контракта
Смарт-контракт Solidity, по сути, представляет собой набор следующих
- данные - который поддерживает текущее состояние контракта
- функция - которые применяют логику для перехода состояния контракта
Смарт-контракты Solidity имеют стандартную структуру. Любой смарт-контракт начинается со следующего утверждения
Директива Pragma
Ключевое слово «pragma» может использоваться для включения определенных функций или проверок компилятора. В приведенном ниже утверждении определяется, что исходный файл (смарт-контракт) не будет компилироваться с компилятором до 0.4.0 и версией компилятора после 0.6.0. Это объявление гарантирует отсутствие непреднамеренного поведения при представлении новой версии компилятора.
прагма солидность> = 0.4.0<=0.6.0
Декларация договора
Контракт объявляется с использованием ключевого слова «контракт». Это объявляет пустой контракт, который идентифицируется именем «PurchaseOrder».
контракт PurchaseOrder {}
Хранение релевантных данных к контракту
Каждый контракт или в общих чертах каждая программа может потребовать хранить некоторые данные. Добавление данных в программу обеспечивает определенный уровень гибкости. Важной особенностью является переход от жестко заданных значений в программе к значениям, заданным пользователем. Переменные позволяют хранить данные, маркировать данные, извлекать данные и манипулировать данными.
Разработка смарт-контрактов: введение переменных
В твердости переменные бывают двух типов
- Тип значения: Переменные этого типа передаются по значению, т.е. они всегда копируются, когда используются в качестве аргументов функции или в присваиваниях. Например: целые числа, логический адрес и т. Д.
- Типы справок: Переменные этого типа относятся к сложным типам и передаются по ссылке, эти переменные не умещаются в 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 недавно обновил свой интерфейс.
Щелкните значок файла, как выделено на изображении выше, откроется проводник.
- Нажав на значок плюса, можно создать новый файл, назовите его PurchaseOrder.sol
- Будет создан пустой файл с именем PurchaseOrder.sol, щелкните и откройте этот файл.
- Давайте скопируем и вставим весь контракт в PurchaseOrder.sol.
- Щелкните второй значок, в левом меню чуть ниже значка файла должна появиться опция компилятора Solidity.
- Под меткой Compiler выберите версию компилятора. Текущая выбранная версия - 0.5.8.
- После выбора версии компилятора нажмите «Скомпилировать 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, щелкните по развертыванию. Ключевые действия, которые произойдут
- Баланс на счете изменяется со 100 эфиров на 99,999999 эфира, списанная сумма представляет собой стоимость транзакции для развертывания смарт-контракта.
- В развернутом контракте появится новая плитка для смарт-контракта, которая также предоставит адрес нового смарт-контракта примерно так (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
- В окне консоли появится следующая информация
- Хеш транзакции - однозначно определяет развертывание контракта
- Стоимость сделки
- Адрес контракта
Взаимодействие с развернутым контрактом
- В развернутом контракте доступны следующие два метода взаимодействия update_quantity и get_quantity.
- Оба этих метода взаимодействия являются общедоступными, определенными в контракте «Заказ на поставку».
- Метод обновления количества «update_quantity» требует входного параметра, следовательно, поля ввода.
- Получить количество Метод «get_quantity» извлекает значение product_quantity.
- Проверим, что происходит при вызове get_quantity, отображается возвращаемое значение 100, которое было инициализировано в конструкторе. Это не вызывает транзакции
- Давайте вызовем update_quantity и предоставим 30 в качестве входных данных. Это вызывает транзакцию
Вкратце, любая операция, которая вызывает операцию записи в состояние контракта (т. Е. Изменяет переменные контракта), приведет к транзакции.
Любая операция, которая просто считывает состояние контракта, не вызывает транзакцию.
Заключение о разработке смарт-контракта
Таким образом, мы только что создали наш первый смарт-контракт, лишь слегка коснувшись поверхности надежности. Мы только что увидели, что нужно для тестирования смарт-контракта прямо от развертывания смарт-контракта до инициирования транзакций.
В следующем блоге, который является продолжением серии статей о разработке смарт-контрактов, мы собираемся более подробно остановиться на основах надежности и более глубоко погрузиться в развертывание смарт-контрактов.
На этом я заканчиваю это Смарт-контракт блог разработки. Надеюсь, вам понравилось читать этот блог и он оказался информативным.
яЕсли вы хотите изучить смарт-контракты, построить карьеру в области блокчейна и получить опыт программирования Ethereum, зарегистрируйтесь в онлайн-режиме Здесь вы получите круглосуточную поддержку, которая поможет вам на протяжении всего периода обучения.
Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев «Разработка смарт-контрактов», и мы свяжемся с вами в ближайшее время.ул.