Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
cyberevents
7 лет назад

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

Основную информацию по написанию смарт-контрактах на 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

8
4.023 GOLOS
На Golos с August 2017
Комментарии (2)
Сортировать по:
Сначала старые