Статьи

Ремикс: разработка умных контрактов для блокчейна Ethereum

Remix — это Solidity IDE, которая используется для написания, компиляции и отладки кода Solidity. Солидность — это высокоуровневый, ориентированный на контракты язык программирования для написания умных контрактов. На него повлияли популярные языки, такие как C ++, Python и JavaScript.

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

Прежде чем начать использовать Remix для разработки умных контрактов, убедитесь, что вы знакомы с некоторыми основными понятиями. В частности, прочитайте эти статьи о блокчейне и Ethereum .

Что такое Smart Contract / Dapp?

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

Используя блокчейн Ethereum, вы можете создавать умные контракты с помощью языка Solidity (среди прочего). Ethereum — не единственная платформа, которую можно использовать для создания умных контактов, но это самый популярный выбор, так как он был разработан с самого начала, чтобы поддерживать их построение.

Dapp означает децентрализованную привязку приложений и представляет собой веб-приложение, которое может иметь интерфейс, написанный на традиционных языках, таких как JavaScript, HTML, CSS, и умный контракт (в качестве внутреннего кода), который выполняется на блокчейне. Таким образом, вы можете просто думать о Dapp как о внешнем интерфейсе плюс связанные умные контракты блокчейна.

В отличие от смарт-контракта, развернутого на самой блокчейне, внешний интерфейс Dapp может быть размещен либо на централизованном сервере, таком как CDN, либо на децентрализованном хранилище, таком как Swarm .

Доступ к Remix IDE

Вы можете получить доступ к Remix IDE различными способами: через Интернет, через веб-браузер, такой как Chrome, из локальной копии или из Mist (браузер Ethereum Dapp).

Использование In-Browser Remix IDE

Вы можете получить доступ к Remix IDE из своего веб-браузера без какой-либо специальной установки. Посетите https://remix.ethereum.org/, и вам будет представлена ​​полная IDE с редактором кода и различными панелями для компиляции, запуска и отладки ваших умных контрактов. У вас будет пример контракта с бюллетенем по умолчанию, с которым вы можете играть.

Remix IDE

Запуск Remix IDE из Mist

Вы можете запустить Remix IDE из Mist, нажав « Разработать» , затем « Открыть Remix IDE» . Ремикс откроется в новом окне. Если вы впервые используете IDE, вам будет представлен простой пример контракта с бюллетенем .

Чтобы ознакомиться с Mist, ознакомьтесь с этой статьей .

Запуск собственной копии Remix IDE

Вы также можете запустить свою собственную копию Remix IDE, выполнив следующие команды:

npm install remix-ide -g remix-ide 

Вам необходимо установить Node.js и npm. Проверьте этот репозиторий GitHub для получения дополнительной информации.

Ремикс Панели

Посмотрев, как открыть Remix IDE, давайте теперь посмотрим на различные панели, составляющие IDE.

Проводник

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

параметры контекстного меню

Обратите внимание, что файловый менеджер по умолчанию использует локальное хранилище браузера, что означает, что вы можете потерять все свои файлы, если очистите или операционная система автоматически очистит хранилище. Для продвинутой работы рекомендуется использовать Remixd — инструмент Node.js (доступен с npm npm install -g remixd ), который позволяет Remix IDE получать доступ к файловой системе вашего компьютера.

Теперь давайте рассмотрим различные действия, которые вы можете выполнять с помощью кнопок в верхней части проводника.

Ремикс кнопки

Создание / открытие файлов в Remix

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

Используя вторую кнопку слева вверху, вы можете открыть существующий файл Solidity из файловой системы вашего компьютера в Remix IDE. Файл также будет храниться в локальном хранилище браузера.

Публикация файлов обозревателя в виде GitHub Gists

Используя третью и четвертую кнопки слева вверху, вы можете публиковать файлы из IDE в качестве общедоступной GitHub.

Копирование файлов в другой экземпляр Remix IDE

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

Подключение к локальной файловой системе

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

Редактор кода солидности

Редактор кода Solidity предоставляет интерфейс, в котором вы можете написать свой код со многими функциями, такими как подсветка синтаксиса, автоматическая перекомпиляция, автоматическое сохранение и т. Д. Вы можете открывать несколько вкладок, а также увеличивать / уменьшать размер шрифта с помощью кнопки +/- в верхний левый угол.

Редактор кода солидности

Терминал

Окно терминала под редактором объединяет интерпретатор JavaScript и объект web3 . Вы можете выполнить код JavaScript в текущем контексте, визуализировать действия, выполняемые из IDE, визуализировать все сетевые транзакции или транзакции, созданные из Remix IDE и т. Д. Вы также можете искать данные в терминале и очищать журналы.

Ремикс терминал

Панель вкладок

Панель « Вкладки» предоставляет множество вкладок для работы с IDE:

  • вкладка « Компиляция »: используется для составления смарт-контракта и публикации в Swarm

  • вкладка « Выполнить »: используется для отправки транзакций в настроенную среду

  • вкладка Настройки : используется для обновления настроек, таких как версия компилятора и многие общие настройки для редактора

  • вкладка « Отладчик »: используется для отладки транзакций

  • вкладка Анализ : используется для получения информации о последней компиляции

  • вкладка Поддержка : используется для связи с сообществом Remix.

Вкладки Remix

Среды исполнения Remix

Remix IDE предоставляет множество сред для выполнения транзакций:

  • JavaScript VM: блокчейн песочницы, реализованный с помощью JavaScript в браузере для эмуляции реального блокчейна.

  • Injected Web3: поставщик, который внедряет web3, такой как Mist и Metamask , соединяя вас с вашей частной цепочкой блоков .

  • Поставщик Web3: удаленный узел с geth, parity или любым клиентом Ethereum. Может использоваться для подключения к реальной сети или к вашей частной цепочке блоков без MetaMask в середине.

Среды исполнения Remix

Использование Remix IDE для компиляции и развертывания Smart Contract

Для демонстрации того, чего мы можем достичь с помощью Remix IDE, мы будем использовать пример контракта и посмотрим, как мы можем:

  • составить договор в Remix IDE
  • увидеть некоторые предупреждения, выдаваемые компилятором, когда не соблюдаются рекомендации
  • развернуть контракт на JavaScript EVM (виртуальная машина Ethereum)
  • совершать сделки по развернутому контракту
  • см. пример чтения и записи в терминале IDE.

Мы будем использовать следующий пример контракта из этого урока, который реализует розыгрыш блокчейна:

 pragma solidity ^0.4.20; contract Blocksplit { address[] public players; mapping (address => bool) public uniquePlayers; address[] public winners; address public charity = 0xc39eA9DB33F510407D2C77b06157c3Ae57247c2A; function() external payable { play(msg.sender); } function play(address _participant) payable public { require (msg.value >= 1000000000000000 && msg.value <= 100000000000000000); require (uniquePlayers[_participant] == false); players.push(_participant); uniquePlayers[_participant] = true; } } 

Контракт объявляет некоторые переменные, такие как:

  • Переменная массива Players, которая содержит адреса участников розыгрыша.
  • Отображение uniquePlayers , которое используется для сохранения уникальных игроков, чтобы игроки не участвовали несколько раз с одного и того же адреса. (Адрес будет сопоставлен с логическим значением true или false, указывающим, участвовал ли участник уже или нет.)
  • Переменная массива winners , которая будет содержать адреса победителей.
  • Переменная charity , которая содержит жестко закодированный адрес благотворительной организации, куда пойдет прибыль.

Он также заявляет:

  • Резервная функция, помеченная как payable , которая позволяет смарт-контракту принимать платежи.
  • Функция play() которая позволяет участникам участвовать в розыгрыше, указав адрес.

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

Теперь откройте IDE Remix с сайта remix.ethereum.org .

Далее создайте новый файл, нажав на кнопку со значком + .

Создание нового файла

Появится новое диалоговое окно. Введите имя для вашего файла ( blocksplit.sol ), затем нажмите OK :

Наименование файла

В редакторе кода откроется новая вкладка, где вы можете начать писать свой контракт. Так что просто скопируйте и вставьте туда предыдущий код контракта.

Сначала начните с составления договора. На вкладке « Компиляция » нажмите кнопку « Пуск для компиляции» .

Мы получаем сообщение с двумя предупреждениями, выданными Статическим анализом кода.

Два предупреждения

Если вы щелкнете по окну сообщения, вы попадете на вкладку « Анализ », которая содержит дополнительную информацию о предупреждениях:

информация о предупреждении

Первое предупреждение выдается, если потребности функций в газе слишком высоки, а второе — если функции require() или assert() не используются надлежащим образом.

Вы также можете использовать флажки на вкладке Анализ, чтобы определить, когда вы хотите, чтобы компилятор отправлял предупреждения.

определить, когда вы хотите, чтобы компилятор выдавал предупреждения

Далее давайте развернем контракт с нашей виртуальной машиной JavaScript. Переключитесь на вкладку Run и выберите JavaScript VM из выпадающего меню.

Выбор виртуальной машины JavaScript

Затем нажмите кнопку « Развернуть» под названием контракта.

Кнопка «Развернуть»

Как только контракт успешно развернут на виртуальной машине JavaScript, в нижней части вкладки « Выполнить » откроется окно.

Запустить вкладку

Под названием и адресом развернутого контракта у нас есть несколько кнопок красного и синего цветов. Красные кнопки относятся к действиям, которые вызывают запись в блокчейн (в нашем случае функции отката и воспроизведения) и требуют транзакции, где синие кнопки относятся к чтению из блокчейна ( благотворительные, игроки, uniquePlayers и открытые переменные победителей, которые мы определили в контракте. код).

Вы также увидите похожее сообщение со следующим снимком экрана в терминале IDE.

Терминальное сообщение

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

значение адреса

Контракт составлен таким образом, чтобы участник мог участвовать в розыгрыше, просто отправляя эфир по адресу (используя функцию обратного вызова), а также вызывая функцию play() с адресом участника.

Виртуальная машина JavaScript предоставляет пять поддельных учетных записей со 100 эфирами каждый, которые мы можем использовать для проверки контракта. Вы можете выбрать текущую учетную запись из выпадающего меню с именем Account под выпадающим списком Environment .

Выберите текущий аккаунт

Теперь, чтобы отправить деньги на контракт, мы сначала устанавливаем переменную Value (от 0,001 до 0,1) и единицу (эфир) из выпадающего меню. Затем мы вызываем функцию отката, просто нажав соответствующую красную кнопку.

Вызов резервной функции

Вот и все. Мы отправили деньги на контракт. Адрес выбранного аккаунта должен быть добавлен в массив players . Чтобы проверить это, просто нажмите на синюю кнопку игроков .

Нажав на синюю кнопку Игроки

Вы можете добавить других участников, выбрав новую учетную запись и повторив предыдущий процесс (чтобы проверить, добавлена ​​ли учетная запись в массив, просто введите индекс от 0 до 4 для этой учетной записи в текстовом поле рядом с кнопкой игроков ).

Если вы добавили учетную запись, которая уже участвовала, вы должны получить предупреждение в терминале, и транзакция завершится неудачей с сообщением, подобным следующему:

Сообщение об ошибке

Ремикс Альтернативы

Существует много альтернатив для простой разработки и развертывания интеллектуальных контрактов, таких как:

  • Трюфель : рекламируется как швейцарский армейский нож Ethereum и претендует на звание самой популярной среды разработки Ethereum с миссией сделать вашу жизнь намного проще. Мы будем много работать с Трюфелем в следующих уроках.

  • Embark : платформа, позволяющая легко разрабатывать и развертывать децентрализованные приложения (DApps).

  • MetaMask : мост, который позволяет вам посетить распределенную сеть завтрашнего дня в вашем браузере сегодня. Это позволяет вам запускать Ethereum DApps прямо в вашем браузере, не запуская полный узел Ethereum. Чтобы узнать, как развиваться с MetaMask, проверьте этот FAQ .

  • Dapp : Dapp — простой инструмент командной строки для разработки умных контрактов.

  • различные плагины для добавления поддержки Solidity в популярные IDE, такие как этот плагин Visual Code, этот плагин Atom и т. д.

Вывод

Мы познакомили вас с Remix IDE для разработки умных контрактов для блокчейна Ethereum. Вы можете найти более подробную информацию в документации .

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