Как я окунулся в смарт-контракты

Июль, седьмой час утра, из окна наблюдаю десяток работников АвтоВАЗа, ожидающих на остановке свой автобус. Разработчику в провинции крайне непросто развлечься - тут нет митапов через день и живого комьюнити. Тут есть тщетность бытия и магическая спокойность - то ли от нехватки амбиций, то ли от сонных настроений окружающих.

В спринт добавляется задача разработки собственной криптовалюты на базе Ethereum. Тщетно роюсь в сети в поисках толковых гайдов, открываю и через мгновение закрываю один за другим. Теряя терпение, открываю почту, начинаю искать письма, содержащие слово "блокчейн" и нахожу ссылку на хакатон в Казани с крупными призами и Виталиком в роли хедлайнера. Регистрируюсь, бронирую хостел и блаблакар. Перечитываю кучу бесполезных ссылок, пытающихся втюхать мне что такое криптовалюта и блокчейн, пишу шпаргалку и деплою в сеть первые контракты.

Hello, <name>coin! или Постигая Solidity

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

  • Перейти на Waves/CryptonoteStarter(или аналоги) и прямо в интерфейсе за 10 минут выпустить свою монету;
  • Разобраться в Solidity, дебаге и деплое. Используя знания и/или стандарт написания смарт-монет ERC20(по факту исходник монеты с многими вариантами блекджеков) задеплоить контракт.

Смарт-контракт - программа, загружающаяся в сеть блокчейн, работающая в зависимости от определенных обстоятельств. Любой участник сети может вызвать методы этой программы за небольшую плату(Gas).

Для записи чего-либо в цепь тратятся ресурсы майнеров, поэтому с инициатора подобных действий берётся плата за выполнение этого действия. Случается, что внутри смарт-контракта происходит слишком много вычислений или происходит запись слишком больших данных, поэтому все блокчейн-разработчики обязаны стремиться к оптимальным и минималистичным контрактам.

Solidity - тьюринг-полный язык программирования смарт-контрактов в Ethereum. Внутри Bitcoin тоже есть свой язык, но он не тьюринг-полный, поэтому написать на нем серьёзный контракт сложно.

Remix - IDE для разработки и дебага смарт-контрактов.

Суть смарт-контракта легко объяснить на примере класса. Вы описываете класс, внутри которого могут задаваться определенные методы/храниться определенные данные. Обычно данные хранятся в структурах с жестким указанием типов данных. Этот класс вы выгружаете в сеть. Желающие могут выполнить определенные методы за Gas, необходимый для обработки метода.

Что стоит понять, что может быть не так очевидно с Solidity?

0) Смарт-контракт после деплоя имеет свой адрес. Любой юзер может что-то запросить у контракта по этому адресу или переслать средства на этот адрес.

1) Заданные переменные в "корне" вашего смарт-контракта будут храниться всегда там. При вызове функции вы можете к этим данным обратиться - прочитать или изменить.

2) Внутри смарт-контракта монет обычно хранится структура в виде адрес кошелька в сети = количество монет. Это и есть все данные, необходимые монете. В ERC20 уже описана эта и некоторые другие функциональности, например, отправка токенов от одного адреса другому. Не изобретайте велосипеды!

3) Для хранения таблиц данных существует структуры. Доступ к элементам таблиц в некоторых случаях приходится делать костылями. Связано это в первую очередь с оптимизацией работы контракта.

4) Вся прелесть блокчейна в том, что всё уже придумано за вас. В сети есть миллионы исходников смарт-контрактов. Более того, на etherscan.io вы можете посмотреть исходные коды публичных смарт-контрактов. Анализ, дебаг и копипейст делают блокчейн слишком простым для входа, что сказывается на качестве продуктов в том числе множестве ICO.

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

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

Деплой смарт-контракта

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

Деплой сделан максимально просто. Я заливал код прямо из Remix через расширение для браузера MetaMask, хотя десктопный клиент Ethereum деплоить умеет не хуже. Открываем Remix, в списке "Select execution environment" выбираем пункт "Injected Web3", нажимаем Create и подтверждаем загрузку в MetaMask.

Слишком легко для того, чтобы быть правдой. Но это работало именно так.

Первые впечатления

Осознав всю сущность смарт-бытия, я был шокирован порогом входа. Его по факту не было! Я сразу же реализовал несколько простейших контрактов - своя монета, голосование, лотерея, ICO, записная книжка. Любое решение не выходило за 500 строк. В ходе разработки приходилось регулярно размышлять над "ценой действия" и порой писать костыли, чтобы получить определнные данные из структур-реестров.

Голова начала пытаться придумать что-то более сложное, но либо для новоявленных идей не был нужен блокчейн(а нужен был, скажем, IPFS), либо всё решалось слишком просто(и неинтересно).

И тут я понял - мне нужен обмен опытом.

Хакатон "Блокчейн - новая нефть России" в Казани

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

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

Описание самого контракта заняло у большинства команд не более 3 часов с учетом дебага. Даже у новичков. Я не увидел ни у кого по-настоящему сложных контрактов(более 1000 строк).

Большую часть времени заняло как раз написание интерфейса для общения с контрактом - семиклассники делали интерфейс на базе телеграм-бота, профессиональные команды, заточенные под блокчейн, доставали из гитлабов исходники реализованных проектов на NodeJS. И именно написание интерфейсов заняло у команд большую часть времени.

Полагаю, что большинство приехало именно за подобными фотографиями. Не стал отрываться от коллектива.

Осознавая, что приехал я за комьюнити и знакомствами с серьезными матёрами "солидитистами", я был разочарован. Комьюнити настолько молодое, что примерно половина ребят впервые работало со смарт-контрактами. Оценив проекты коллег, мне стало грустно(в том смысле, что rocket-science не увидел). Смарт-контракт - это очень маленькая программа, решающая вполне конкретную задачу, чаще всего заключающаяся в записи в реестр какой-то информации и получение её из реестра.

Тут(в смарт-контрактах на базе Ethereum) нет никакой магии. Куда там уходят бюджеты государств, компаний, команд - для меня загадка. В сети(в 99,999999% случаев) уже есть необходимый вам шаблон смарт-контракта для ICO/вашей именной монеты и прочего, который допилит любой "тыжпрограммист", у которого черепашка Logo двигаться.

Прикладной Ethereum

Для своего прикладного решения я(и некоторые другие участники) выбрали Python. И это была реально боль. Мы сидели и матерились по очереди, перебегая друг к другу с надеждой в глазах, что всё заработает. В конце-концов оно заработало, но позже я узнал, что скорее всего проблема была в тестнете эфира, поднятом для хакатона.

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

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

Короче, если прикладываете какую-то сервер-сайд логику своему контракту, лучше используйте NodeJS, там всё работает почти из коробки. Во всяком случае танцев с бубном будет на один меньше.

Битва за вузы

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

Если кратко: никто мне даже не ответил.

Я также задумывался над тем, чтобы начать проводить курсы по написанию смарт-контрактов, но, расписывая в десятый раз программу, понимал, что набирается информации на занятие длиной в 2-3 часа для людей, которым нужно еще объяснить как работает блокчейн. Не густо.

После хакатона

Я успел пообщаться со всеми участниками, обменяться контактами, во мне были заинтересованы как в блокчейн-разработчике, кидали White Paper'ы различных проектов, просили провести аудит контрактов, сделать review на проект, выходящий на ICO и многое другое. С одной стороны - ура, я в тусовке! С другой - все эти запросы можно разделить на несколько(часто пересекающихся между собой) категорий:

  • в большинстве случаев проект имел плохую на мой взгляд идею(например: утопия; что-то новое, не актуальное ни для кого; etc.) или был слишком прост в реализации;
  • заказчик не понимал зачем ему блокчейн или не понимал как он работает;
  • ребята просто хотят быстро заработать, а что там и как будет - не суть.

Выводы касательно смарт-контрактов на базе Ethereum

  • Смарт-контракты - это слишком просто и в какой-то степени скучно.
  • Скорее всего ваш проект entry-уровня, то есть реализовать его можно на коленке за несколько вечеров после работы
  • Блокчейн применим в очень малом количестве ситуаций. Чаще более актуальны централизованные хранилища/IPFS/etc.
  • Нужный вам смарт-контракт уже на 95% реализован, осталось его найти и допилить.
  • Большинство ICO - профанация чистой воды.
  • Сложность в проведении ICO только одна - маркетинг вашего продукта.
  • Скорее всего крутейшая идея вашего продукта - просто уныла, недееспособна и имеет место быть лишь у вас в голове. Без обид.

В любом случае буду рад ответить на ваши вопросы в комментариях или в чате t.me/chainchain.

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

0
16 комментариев
Написать комментарий...
Алексей Другой

Классно, бесценный опыт)

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Артём Лисовский
Автор

Спасибо! Буду стараться писать чаще

Ответить
Развернуть ветку
Mitry Romanov

В спринт добавляется задача - в какой-такой спринт?

Ответить
Развернуть ветку
Артём Лисовский
Автор

Agile - гибкие методологии разработки

Ответить
Развернуть ветку
Mitry Romanov

спасибо

Ответить
Развернуть ветку
Алексей Другой

Уверен, что большую часть вузов даже не касалась волна хайпа всего "блокчейна" уж тем более ещё меньше тех кто задумывается о преподавание студентам таких вещей

Ответить
Развернуть ветку
Алексей Шелевой

Одобряю. Оригинальный материал. Интересно. Буду ждать от тебя следующего.

Ответить
Развернуть ветку
Артем Ротганк

Добрый день Артем. Интересная статья. Можете ил Вы посоветовать кого то в помощь для разработки смарт контракта для PRE ICO и ICO ? МОжет Вы можете нам помочь в этом ?

Ответить
Развернуть ветку
Артём Лисовский
Автор

свяжитесь в тг http://t.me/unlimitedtor

Ответить
Развернуть ветку
Ян Ласка

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

Ответить
Развернуть ветку
Артём Лисовский
Автор

Советую "войти" в тему через многочисленные ролики на youtube и статьи.

Ответить
Развернуть ветку
Сергей Ant

Доброго. Начал изучать. Нигде не нашел инфы. Если подскажите, большое спасибо.
Читал что есть единовременная плата при запуске смарт-контракт в основной сети eth.
Если есть какая она на сегодняшний день?

Ответить
Развернуть ветку
Артём Лисовский
Автор

Я так понял, что вы говорите про выгрузку.
Стоимость выгрузки в сеть контракта формируется из затраченного газа и цены за единицу газа(которая влияет на скорость публикации). В среднем до 10usd выходит деплой контракта. Неизвестных переменных две, поэтому сложно сказать вилку :)

Ответить
Развернуть ветку
Vladimir Udartsev

А вот это правильная статья. Даже актуальность не потеряла со временем.

Ответить
Развернуть ветку
Артём Лисовский
Автор

на самом деле тут все немного устаревшее.
скоро скину ссылку на наш сервис конструтора смартконтрактов за копейки

Ответить
Развернуть ветку
Вячеслав Салманов

Артем, спасибо за информативную статью) тоже скоро предстоит хакатон, ранее уже создал свое подобие блокчейна - голосовалку, но что такое смарты пока не доходит( Вы говорили можете поделиться исходниками на Python?) буду премного благодарен

Ответить
Развернуть ветку
13 комментариев
Раскрывать всегда