Смарт-контракты: базовые инструменты для разработки и тестирования. Спикер: Дмитрий Дудин


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

Что же необходимо для настройки эффективной работы со смарт-контрактами на Ethereum? Определим ключевые инструменты для разработки и тестирования на платформе:


  • Solidity

Solidity - язык программирования основанный на JavaScript.

В нем можно выделить много интересных конструкций, например Маппинг. Мапп в Solidity - это подобный JavaScript объект, у которого для всех ключей есть значение, то есть если вы возьмете объект ABC - его значение будет 0, CDE - 0, и до тех пор, пока вы не установите свое значение, там будет 0.

Также стоит отметить, что в отличии от Java Script арифметика в Solidity ведется в больших и целых числах, а timestamp проставляется в секундах.

IDE (Integrated Development Environment) для Solidity можно легко подобрать, поскольку уже существует огромное количество плагинов:


IMG_0994.jpg

Рекомендации по прочтению полезных документов перед началом работы с Solidity


IMG_0995.jpg!

В одном из этих документов есть строка


IMG_0996.jpg

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

Для удобной работы с Solidity используйте набор смарт-контрактов Zeppelin Solidity


IMG_1038.jpg

Их код можно брать за основу, в базе есть контракты практически на все типовые случаи:


IMG_0998.jpg


  • Клиенты


Ноды на которых запускается Ethereum - клиенты Geth или Parity:


IMG_1003.jpg

По функциональности они стоят практически на одном уровне: Parity работает быстрее, Geth стабильнее, поскольку официально поддерживается Ethereum.


  • TestRPC

TestRPC - это МРМ модуль для тестирования смарт-контрактов.


IMG_1005.jpg

Запуская TestRP, вы поднимаете точно такой же нод как Geth или Parity, но локально и уже с предустановленными 10 кошельками.

Преимущества TestRPC перед тестированием в «живой» сети:


IMG_1007.jpg


  • Есть возможность быстро установить новое состояние, нет необходимости синхронизироваться с Блокчейн

  • Транзакции, попадая в сеть, сразу подписываются - не надо ждать подтверждений

  • Не надо платить за газ


В TestRP можно протестировать срез реальной Блокчейн сети для нахождения ошибок и уязвимостей.


IMG_1008.jpg


  • Truffle

IMG_1009.jpg!

Truffle - это набор инструментов для удобной работы со смарт-контрактами.

Информация из официальной документации:


IMG_1010.jpg

Truffle - это МРМ модуль, который создает директорий следующих папок:


IMG_1011.jpg


  • Миграции - это скрипты описывающие процесс загрузки смарт-контрактов в сеть

  • Контракты - это собственно ваши контракты

  • Build - хранит скомпилированные коды контрактов для Ethereum.


В сеть Ethereum вы не загружаете смарт-контракт в текстовом виде, его необходимо загрузить в коде, то есть перед загрузкой он компилируется. После компиляции вы теряете весь интерфейс, а клиент, который работает с контрактом должен знать все методы. По этой причине у каждого смарт-контракта после компиляции есть две части: первая бинарная, которая загружается в сеть Ethereum и интерфейсная, которая описана JSON и все эти данные хранятся в папке Build.


  • Тесты - Truffle позволяет создавать тесты, которые пишутся на Mocha и Chai

IMG_1032.jpg

Также в Truffle описываются конфигурации по деплою:


IMG_1031.jpg

Truffle Console дает доступ к состоянию сети и JavaScript Console для взаимодействия с вашими смарт-контрактами:


IMG_1042.jpg


  • Remix

IMG_1014.jpg

Remix - продукт достаточно сырой, но единственный для поиска ошибок в смарт-контрактах и в кусках кода.

Интерфейс становится понятным только после использования:


IMG_1015.jpg


  • WEB3

IMG_1016.jpg

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


  • Test networks

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

Основные тестовые сети:


IMG_1017.jpg

Важный вопрос при работе в тестовых сетях:


IMG_1022.jpg

В данных тестовых сетях процесс faucet устроен по-разному:


  • В Ropsten есть бот, который переводит вам Ether после запроса:


    IMG_1019.jpg

  • В Rinkeby есть специальный клиент для этой цели:


    IMG_1020.jpg

  • В Rovan есть бот в gitter:


    IMG_1021.jpg



  • MultiSig

IMG_1041.jpg

В сети Ethereum нет встроенных MultiSig кошельков, но существуют готовых имплементаций данных кошельков и самый надежные вариант указан на изображении


  • Собственный нод

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


IMG_1024.jpg

Персональные советы спикера при работе со смарт-контактами:


  1. По причине того, что индустрия достаточно молодая и малоизвестная - спрашивайте советы у компетентных специалистов

  2. Обязательно проводите аудит проделанной работы

  3. Готовьтесь к ответственности

  4. Не работайте только за токены

Если у вас остались вопросы или вы хотите узнать более подробную информацию - обращайтесь любым удобным способом:


IMG_1026.jpg


Comments 2


В этом "котле" нужно "вариться"! Да, понятно о инструментах, о принципе работы, да вообще понятно и при прочтении остаётся в голове. Но например, как человеку далёкому от программирования, нужно надеяться на чью-то помощь.

12.01.2018 10:47
0

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

12.01.2018 14:47
0