Редактор Remix

Remix

Редактор Remix — это настоящий комбайн, позволяющий контролировать и оптимизировать написание контракта прямо в браузере без установки дополнительных программ.

В первом уроке мы компилировали наш контракт в Remix. Давайте посмотрим на что еще способен этот редактор.

Откройте сайт http://remix.ethereum.org и скопируйте-всавьте код нашего токена из первого урока. Во вкладке Settings  переключите версию Solidity на 0.4.21. А во вкладке Run в поле Environment выберите Javascript VM. В этом поле три варианта. Injected Web3 позволяет соединиться с Метамаском и задеплоить контракт в блокчейн с его помощью, а Web3 Provider позволяет подключиться к локальной ноде http://localhost:8545 или удаленной ноде.

Remix

Javascript VM — это виртуальная машина, эмулирующая реальный блокчейн Ethereum. В прошлом уроке мы взаимодействовали с функциями нашего уже задеплоенного в блокчейн контракта с помощью MyEtherWallet, здесь же мы можем взаимодействовать с контрактом без деплоя. Это облегчает тестирование контрактов и поиск ошибок.

Итак, при выборе Javascript VM в поле Account автоматически создаются пять адресов со 100 виртуальными Эфирами на каждом.

Скомпилируйте контракт во вкладке Compile и вернитесь во вкладку Run. Нажмите на красную кнопку Deploy.

Вы увидите что ниже появился список всех функций контракта — розовым цветом отмечены те функции, которые что-либо записывают в блокчейн (transact),  бледно-синим те, которые что-либо извлекают (call).

А также появился журнал событий (на сером фоне). В нем записываются подробности каждой транзакции.

Нажмите на name и увидите название токена. Нажмите на totalSupply и отобразится общее кол-во токенов (не забывайте про 18 нулей). И так далее.

Теперь давайте переведем 500 токенов на другой адрес. Переключитесь в поле Account на второй адрес и скопируйте его, затем переключитесь обратно на первый. В поле функции transfer вставьте адрес, поставьте запятую и пробел и введите 500 с 18 нулями. Получиться должно так:

Remix

Жмите transfer. В журнале событий можно увидеть подробности транзакции (успешно или нет, комиссия, расход газа и т.д.).

Теперь можно поиграться с безопасностью. На втором аккаунте у нас 500 токенов. Давайте попробуем с него перевести на третий аккаунт 800 токенов, то есть количество, которого у нас нет. Переключитесь в поле Account на третий адрес, скопируйте его и переключитесь назад на второй. В поле transfer введите адрес и 800 с 18 нулями, жмите transfer. В журнале событий вы увидите сообщение об ошибке, при этом комиссия за транзакцию все равно спишется. В функции transfer у нас есть проверка этого:

Строка require(_to != address(0)) проверяет что адрес соответствует eth-адресу, строка require(balances[msg.sender] >= _value) проверяет что на балансе отправителя больше или равно количеству отправляемых токенов. В старых версиях Solidity вместо require использовалась функция:

То есть если баланс отправителя меньше отправляемого, то прекратить. Но такую запись упразнили.

Ошибки

Remix помогает нам отслеживать ошибки. Ошибки можно разделить на два типа: критические, из-за которых выполнение контракта невозможно (красные), и советы, помогающие оптимизировать контракт (оранжевые). Уберите точку с запятой в определении переменной uint256 totalSupply_; и заново скомпилируйте контракт. Это критическая ошибка, после которой выполнение контракта невозможно.

Remix

Видим крестик и совет на красном поле с предложением по исправлению.

Теперь верните точку с запятой назад, а в функции function totalSupply() public view returns (uint256) уберите модификатор view и снова скомпилируйте контракт.

Remix

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

Мы рассмотрели с вами основы работы в Remix. В следующих уроках по мере изучения Solidity рассмотрим как работать с несколькими файлами, импортировать файлы из Гитхаба и т.д.

Читайте также:

Поделиться:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *