hwd tech
блог
«Программирование поведения»:
невыносимая легкость разработки под блокчейн

Стоит ли учиться разработке смарт-контрактов? Правда ли, что там водятся легкие и бесконечные деньги? И кому они в итоге достанутся?
30-04-2018
блокчейн, Solidity
Время чтения: 5 минут
Первое, с чего на наш взгляд стоит начинать все материалы про блокчейн – с повторения прописной истины: ни в коем случае не надо инвестировать в это дело никакие значимые для вас суммы. Потому что риски в данной сфере просто зашкаливающие, а вероятность потерять деньги очень высока. При таком раскладе даже на чудо надежды нет.
Но мы здесь собрались поговорить вовсе не об этом. А о том, как зарабатывать «на блокчейне» более безопасным способом, чем инвестиции. То есть, о программировании. В частности, о том, какова жизнь программиста смарт-контрактов (он же, грубо говоря, программист под блокчейн) и чем она отличается от жизни «обычного» программиста (звучит как «обычный порошок», но мы вовсе не имели ввиду посредственность).
Историческая справка (которую можно пропустить)
Начнем издалека. Во-первых, как связаны программирование смарт-контрактов и блокчейн? Да очень просто. Смарт-контракт — это алгоритм, предназначенный для заключения и поддержания коммерческих контрактов в технологии блокчейн. Программирование смарт-контрактов – это очень и очень молодое веяние.

Идею блокчейна в 2009 году предложил Сатоши Накамото. До сих пор неизвестно – это один человек, скрывающий свою личность, или даже целая группа ученых. Сатоши опубликовал работу, которая описывала данную технологию. В то же время, сама идея возникла еще в 1980-х.

Говоря самыми простыми словами, блокчейн – это распределенная база данных. Эта технология решает ряд очень важных задач, в частности, связанных с доверием друг к другу пользователей Сети, заключающих сделку. Благодаря блокчейну, наконец-то никто никому «доверять» не обязан. Все, что происходит, в любой момент может быть провалидировано, любой член сообщества может удостовериться в верности данных, а каждый участник блокчейна хранит у себя копию всех данных – именно это значит, что данные распределены, и никто не может их изменить в свою пользу.

Вместе с технологией блокчейна Сатоши Накамото предложил и пример ее применения, криптовалюту, самый яркий представитель которой – биткойн. Эта идея всколыхнула умы и понравилась многим: валюта, на которую не могут влиять государства и крупные игроки рынков, оборот которой прозрачен, «правила игры» понятны для всех и соблюдаются всеми («особо одаренные» сразу отсеиваются сообществом). Соответственно, стали появляться все новые и новые криптовалюты.

И в то же время общество в очередной раз подняло вопрос о смарт-контрактах. Благодаря блокчейну, возрос уровень доверия к этой технологии: опять же, у всех участников хранится копия, ничего нельзя подменить, легко удостовериться, что контракт выполнен правильно.
часть 2
Та часть, в которой говорится про огромные деньги
Эту часть ну просто никак нельзя пропустить!
Самая популярная реализация смарт-контрактов на блокчейне – это платформа Ethereum, запущенная в 2015 году. Одним из невероятно крутых способов применения Ethereum и смарт-контрактов оказался запуск ICO — Initial coin offering. Это форма сбора инвестиций на IT-стартапы в виде продажи всем желающим фиксированного количества новых единиц криптовалют. Практически сразу возникло огромное количество желающих вложиться и получить легкие деньги. Народ начал «вкидывать» в ICO просто невероятные суммы. Соответственно, здесь образовались огромнейшие инвестиции из воздуха. Речь идет в том числе о проектах, которые получали по миллиарду долларов.

И что же в итоге получилось? У нас огромное количество блокчейн-проектов, в которые закинуто неприличное количество денег. И у нас абсолютно отсутствуют программисты, которые умеют писать код под блокчейн. Спрос перегрет просто нереально, деньги безумные – и легкие на вид. Для многих программистов это стало шансом.
часть 3
Невыносимая легкость Solidity
Те, кто действительно рискнул, подсуетился и разобрался в новой технологии, смогли за короткий срок в десятки и сотни раз улучшить свой заработок и стать крутыми экспертами в блокчейн-технологиях. Соответственно, эти люди получили высокие должности и вдохновили множество в том числе молодых специалистов пойти по их стопам.

Несмотря на то, что сейчас «волна денег» в блокчейне спала, люди все равно продолжают вкладываться в это направление. По-прежнему есть проекты с хорошим финансированиемы, продолжается исследование смарт-контрактов, а значит спрос на программистов все еще высокий.
Для справки: по состоянию на начало 2016 года, специально для Ethereum разработаны следующие языки:

Serpent — похож на Python.
Solidity — похож на JavaScript.
Mutan — похож на Go.
LLL — похож на Lisp.
«Основным» считается Solidity, его синтаксис действительно похож на язык Java Script. И вообще, так как это сравнительно новое направление программирования, синтаксис языка очень прост: скромный набор базовых операций, небольшой набор типов, весь код пишется на очень примитивном уровне. Отсутствуют фреймворки и библиотеки.

Почему язык такой? Да очень просто. Те, кто разрабатывал Solidity, понимали, что для развития инфраструктуры им нужен язык, похожий на уже существующие. Для того, чтобы можно было привлекать разработчиков с опытом. Именно поэтому Solidity похож на С-подобные языки и, в частности, на JS.

С одной стороны получается, что порог входа для тех, кто знаком с программированием, максимально понизили. С другой, блокчейн – это ведь принципиально новое направление, новая структура. И, если глубоко копать, стоило бы разрабатывать этот язык именно с учетом ограничений, накладываемых технологией и инфраструктурой.
Однако, команда разработчиков, стоящих у истоков Ethereum, объективно понимала, что технология новая, им нужно привлечь к ней внимание, создать вокруг нее тусовку. И если порог входа сделать чуть выше, никто не придет. Поэтому разработчики пошли на компромисс и сделали то, в чем люди смогут быстро разобраться. Возможно, они даже планировали, что потом как-то «перепилят» Solidity, но пока все пошло не совсем так, как ожидалось в момент старта.

Низкий порог входа Solidity привел к тому, что в эту технологию как в омут с головой попрыгали молодые разработчики без опыта, привлеченные кажущейся легкостью изучения и непомерно высокими зарплатами. А в омуте их ждали черти.
Читать еще:
Материалы, которые могут вас заинтересовать.
часть 4
Подводные камни разработки под блокчейн
(Или «ловушка для неопытных»)
А теперь главный вопрос. С какими проблемами сталкиваются разработчики смарт-контрактов, какие задачи перед ними встают?
В чем принципиальное различие между тем, когда мы просто пишем код и когда мы пишем код под смарт-контакты? В первом случае идет привычная нам разработка и мы имеем большую степень контроля над кодом. То есть, разрабатывая сайт, мы точно знаем, что все будет выполняться, например, на нашем сервере. Наша задача этот сервер обезопасить – и дело сделано.

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

Так как в 95% случаев программирование смарт-контрактов завязано на работу с деньгами, то выгода оказывается очень большой. И легко получаемой: исполнитель нашел уязвимость – и с легкостью может получить прибыль за счет нее. При этом, ему даже не придется совершать какие-то лишние телодвижения, продавать кому-то информацию, нет. Просто – сразу деньги.
Приведем пример
Допустим, мы решили сделать смарт-контракт казино или лотереи. Так называемый майнер будет исполнять его у себя на компьютере и, если ему результат не понравится (не выиграл), он может не отправлять его в общую сеть, а пытаться выполнить смарт-контракт снова и снова. Пока, грубо говоря, не выиграет он. Процесс заморочный, для таких манипуляций надо менять среду выполнения, но это абсолютно реально. И если на кону большая сумма, джек-пот, то мотивация делать это у человека есть.
Ответственность программиста в данной ситуации просто огромна. По сути, все эти манипуляции в итоге окажутся «на его совести».

Второй момент. Давайте не будем забывать, как сейчас разрабатывается ПО в большинстве случаев. «Быстрее, быстрее, надо скорее что-то сделать и немедленно выкатить пользователям!». Если что не так – они пожалуются и ошибки быстренько исправят.

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

И мы опять возвращаемся к тому, что требования к качеству кода возрастают просто в сотни и тысячи раз по сравнению с обычной разработкой. И приходим к выводу о том, что романтичная мечта многих студентов о том, чтобы быстро изучить Solidity, который существует всего-ничего, и пойти зашибать огромные деньги, разбивается. Потому что оказывается, что для разработки надежного решения нужен огромнейший опыт в программировании, огромнейший жизненный опыт и огромное количество факапов позади.
Но и это еще не все. Осознание того факта, что твой код должен выполняться на большом количестве распределенных машин, постановка тех вопросов, которые раньше не были так остры (в частности, вопрос о качестве, вопрос защиты от злоумышленников) – все это требует очень серьезной гибкости мышления. Более того, некоторые специалисты считают, что разработка под блокчейн – это, на самом деле, уже не программирование машин, а программирование поведения людей. То есть, мы, помня о том, что человек может захотеть изменить софт, который майнит, в своих интересах, должны задумываться о том, как запрограммировать поведение этого исполнителя.
часть 5
И что теперь – вообще не учиться разработке смарт-контрактов?!
Факапов бояться - в лес не ходить.
А если серьезно, тут не может быть двух мнений, учить Solidity, конечно, стоит.

Если вы реально опытный программист, разобравшись в этом языке, вы сможете разрабатывать смарт-контракты. А значит, устроиться на хорошую должность – до сих пор есть спрос на разработчиков под Etherium. Таким образом можно не то, чтобы сказочно поднять свою зарплату, но на иной качественный уровень выйти точно. Главное не бояться обнаружить в определенный момент, что ты очень крупно облажался.

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

Если вы неопытный программист, нужно быть просто готовым, что сходу ты больших успехов в блокчейне все равно не добьешься. Но это совершенно не значит, что вообще учить Solidity не надо. Это изучение в принципе очень положительно скажется на гибкости мышления. Для общего развития просто необходимо понять, как работает не только клиент-серверная и десктопная разработка, но и разработка под блокчейн.
часть 6
Пара мыслей о будущем
Разумеется, сообщество задается вопросом о том, что делать с вышеописанными проблемами разработки под блокчейн. Пока +/- хорошим выходом считаются фирмы, которые занимаются валидацией смарт-контрактов. Правда, здесь тоже есть проблема: аудитор должен быть более прокаченным, чем разработчик. Но технология (все еще!) новая, и соответствующей квалификации ни у кого нет. Не защищена от багов и сама платформа Еthereum, из-за этого под сомнение ставится выполнение вообще всех смарт-контрактов.

Есть проблема и с тем, что смарт-контракты, в отличие от криптовалют, пока не смогли в полной мере проникнуть в жизнь людей. Но над этим тоже работают и есть надежда, что область применения найдется. Более того, можно сейчас поставить на то, что эта область будет развиваться, могут быть огромные скачки. Как минимум, еще осталось почти все население Земли, которое можно замотивировать инвестировать свои деньги в блокчейн. Серьезно, пока что их менее 1%. Не исключено, что будет новая волна и опять повезет тем, кто был готов и все «инвестиции» достанутся именно им.
Раз в месяц мы делаем рассылку с анонсом новых кейсов и статей, опубликованных на сайте.
Подпишитесь на обновления.
Гарантируем - никакого спама. Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой в отношении обработки персональных данных.