Смарт-контракты: базовые инструменты для разработки и тестирования. Спикер: Дмитрий Дудин
Основную информацию по написанию смарт-контрактах на Ethereum, а также некоторые полезные советы из личного опыта спикера касательно данной темы вы узнаете из сегодняшней лекции.
Что же необходимо для настройки эффективной работы со смарт-контрактами на Ethereum? Определим ключевые инструменты для разработки и тестирования на платформе:
- Solidity
Solidity - язык программирования основанный на JavaScript.
В нем можно выделить много интересных конструкций, например Маппинг. Мапп в Solidity - это подобный JavaScript объект, у которого для всех ключей есть значение, то есть если вы возьмете объект ABC - его значение будет 0, CDE - 0, и до тех пор, пока вы не установите свое значение, там будет 0.
Также стоит отметить, что в отличии от Java Script арифметика в Solidity ведется в больших и целых числах, а timestamp проставляется в секундах.
IDE (Integrated Development Environment) для Solidity можно легко подобрать, поскольку уже существует огромное количество плагинов:
Рекомендации по прочтению полезных документов перед началом работы с Solidity
!
В одном из этих документов есть строка
По возможности используйте то, что уже написано - это касается всех языков программирования и в Solidity это особенно актуально, так как остро стоит вопрос безопасности. Если в JavaScript что-то перестало функционировать - вы можете исправить ошибку, в случае с Solidity - вы не можете ничего исправить, если не предусмотрели все детали в интерфейсе.
Для удобной работы с Solidity используйте набор смарт-контрактов Zeppelin Solidity
Их код можно брать за основу, в базе есть контракты практически на все типовые случаи:
- Клиенты
Ноды на которых запускается Ethereum - клиенты Geth или Parity:
По функциональности они стоят практически на одном уровне: Parity работает быстрее, Geth стабильнее, поскольку официально поддерживается Ethereum.
- TestRPC
TestRPC - это МРМ модуль для тестирования смарт-контрактов.
Запуская TestRP, вы поднимаете точно такой же нод как Geth или Parity, но локально и уже с предустановленными 10 кошельками.
Преимущества TestRPC перед тестированием в «живой» сети:
- Есть возможность быстро установить новое состояние, нет необходимости синхронизироваться с Блокчейн
- Транзакции, попадая в сеть, сразу подписываются - не надо ждать подтверждений
- Не надо платить за газ
В TestRP можно протестировать срез реальной Блокчейн сети для нахождения ошибок и уязвимостей.
- Truffle
!
Truffle - это набор инструментов для удобной работы со смарт-контрактами.
Информация из официальной документации:
Truffle - это МРМ модуль, который создает директорий следующих папок:
- Миграции - это скрипты описывающие процесс загрузки смарт-контрактов в сеть
- Контракты - это собственно ваши контракты
- Build - хранит скомпилированные коды контрактов для Ethereum.
В сеть Ethereum вы не загружаете смарт-контракт в текстовом виде, его необходимо загрузить в коде, то есть перед загрузкой он компилируется. После компиляции вы теряете весь интерфейс, а клиент, который работает с контрактом должен знать все методы. По этой причине у каждого смарт-контракта после компиляции есть две части: первая бинарная, которая загружается в сеть Ethereum и интерфейсная, которая описана JSON и все эти данные хранятся в папке Build.
- Тесты - Truffle позволяет создавать тесты, которые пишутся на Mocha и Chai
Также в Truffle описываются конфигурации по деплою:
Truffle Console дает доступ к состоянию сети и JavaScript Console для взаимодействия с вашими смарт-контрактами:
- Remix
Remix - продукт достаточно сырой, но единственный для поиска ошибок в смарт-контрактах и в кусках кода.
Интерфейс становится понятным только после использования:
- WEB3
WEB3 - JavaScript библиотека, которая используется во многих фреймворках и с которой легко подключиться к нодам Ethereum.
- Test networks
Основные тестовые сети:
Важный вопрос при работе в тестовых сетях:
В данных тестовых сетях процесс faucet устроен по-разному:
- В Ropsten есть бот, который переводит вам Ether после запроса:
- В Rinkeby есть специальный клиент для этой цели:
- В Rovan есть бот в gitter:
- MultiSig
В сети Ethereum нет встроенных MultiSig кошельков, но существуют готовых имплементаций данных кошельков и самый надежные вариант указан на изображении
- Собственный нод
Если, по определенным причинам, вы решили поднять собственный нод, вам необходимо запустить локальную сеть, которая будет синхронизироваться с Ethereum. Организация подобной инфраструктуры достаточно сложна и есть смысл воспользоваться альтернативами:
Персональные советы спикера при работе со смарт-контактами:
- По причине того, что индустрия достаточно молодая и малоизвестная - спрашивайте советы у компетентных специалистов
- Обязательно проводите аудит проделанной работы
- Готовьтесь к ответственности
- Не работайте только за токены
Если у вас остались вопросы или вы хотите узнать более подробную информацию - обращайтесь любым удобным способом: