Смарт-контракты. Часть 2.
МПродолжаем о смарт-контрактах.
История успеха: ICO
Сейчас появились десятки способов проведения ICO. Некоторые даже проводятся на самодельных биржах и никак не связаны с блокчейном. Но мы разберем пример классического ICO, какими они изначально технически задумывались — через смарт-контракты.
ICO — красивый пример полезного применения смарт-контрактов, и к этому моменту вы скорее всего догадываетесь, в чем он состоит. Разберем на Олегах.
Теперь Олег — мастер по производству милых плюшевых акул. Вот таких:

Олег делает плюшевых акул дома и продаёт их в интернете. Акулы стали очень популярны и Олег решил расширять бизнес, но он не может родиться в богатой семье или взять кредит в банке. Олег решает провести ICO — выпустить собственные токены, или другими словами валюту — акула-коин, продать их и собрать на этом немного денег.
Олег создаёт смарт-контракт, в котором описывает акула-коин, для этого уже есть даже готовый стандарт — ERC20. Смарт-контракт для токена абсолютно банален, в нём описаны функции «купить», «продать», «передать» и «баланс». Когда кто-то посылает на контракт транзакцию с деньгами (Эфирами), внутри смарт-контракта в простой словарь записывается «такой-то кошелек владеет столькими-то акула-коинами». Этот словарь хранится прям в блокчейне, в том самом «хранилище Ethereum», то есть виден всем желающим.
Олег загружает его в блокчейн через Ethereum Wallet и уже может идти писать на форумы «ребята, покупайте мои токены». На хайпе кто-нибудь даже купит себе парочку, как в истории с Useless ICO, где чувак решил собрать себе денег на новый компьютер, а собрал десятки тысяч долларов. Это похоже на выпуск акций, но еще не является полноценным ICO. Это скорее донаты за виртуальное вознаграждение.
ICO-профессионалы сейчас возмутятся, мол, где же Вайтпейпер, где модный Лендинг со списком Адвайзеров, договор с Биржей и тред с краденого аккаунта на БиткоинТолке. Да, всё это пригодится, но к технической стороне не имеет никакого отношения.
Для полноценного ICO не хватает логики самой продажи: сколько стоит токен, какой лимит продажи, есть ли скидки ранним покупателям и другие особенности. Олег может заложить всю эту логику сразу в акула-коин, но тогда он уже никогда не сможет её изменить. Не сможет установить новые лимиты или устроить распродажу.
Тут я подскажу Олегу, что эту задачу решают созданием второго смарт-контракта — контракта продажи. В нём и закладывается вся логика проведения ICO: даты начала и конца, первоначальная цена, ограничения количества продаваемых токенов, и.т.д. Теперь инвесторы будут присылать деньги на него, а он уже будет решать сколько акула-коинов выдать каждому и по какой цене.
Такой контракт тоже нельзя изменить после загрузки в сеть, ведь этим гарантируется честность ICO. Зато теперь он работает только в установленные автором сроки и потом можно создать новый, устроив новый раунд или распродажу. При проведении ICO стандартной практикой является загрузка контракта в сеть заранее, чтобы пользователи успели с ним ознакомиться. Еще популярно делать pre-sale, создавая временный контракт со скидкой, который можно будет вызвать только в ограниченный срок перед продажей. Это подогревает активность участников.

После ICO акула-коины существуют по сути только как записи внутри контракта. Технически как банальный словарь {Иван: 20 коинов, Олег: 100 коинов}, который теперь навсегда записан в глобальном хранилище. У циферок в словаре нет никакой плавающей цены, потому что их нельзя покупать или продавать — можно только передать или подарить кому-то.
Чтобы у проданных токенов появилась цена, Олегу надо добавить их на любую биржу. В этом случае Олег как бы переводит все собранные токены на счет биржи (со всеми очевидными опасностями её закрытия), на которой уже начинает формироваться их цена в зависимости от спроса и предложения.
Вот так в двух словах устроено ICO. Году в 2016 его даже можно было провести по этому описанию. Сейчас же на этот рынок прибежали Важные Дядиtm и правила игры стали сильно сложнее. Но как пример полезных смарт-контрактов ICO офигенен.
История провала: The DAO
У успеха контрактов есть и обратная сторона: история The DAO. Показательный пример того, как сделать всё правильно, но всё равно обосраться, разделить блокчейн и потерять половину коммьюнити.
Шел 2016 год, ICO еще не было массовым явлением, но Ethereum-коммьюнити уже было вдохновлено идеей тотального краудфаундинга через смарт-контракты. Тогда родился проект Decentralized Autonomous Organization. The DAO был по сути большой смарт-контракт, в котором были заложены механизмы классического инвестиционного фонда: участники вносят свои деньги, получают свою долю, с помощью голосования выбирают в какие проекты вложить собранные средства, чтобы потом срубить профит.
Смарт-контракт был гарантией, что никто никого не обманет и вообще будет полная демократия. В нём учли даже вариант, что некоторые участники захотят выйти из DAO и организовать собственные фонды. Например, если они не согласны с выбором проектов или просто хотят сами поиграть в инвесторов. Децентрализация внутри децентрализации — криптоанархисты в восторге.
Запуска The DAO ждали почти все, так что сразу после запуска в «фонд» прислали около $165 млн (а по текущему курсу Эфира это более $4.3 млрд). Это было большим событием в коммьюнити, даже сам Виталик поручился за его успех.
Через неделю после запуска, в коде смарт-контракта на GitHub нашли ошибку, в том самом месте, где реализовывалась логика «выйти и забрать свою долю из фонда». Всем нам знакомый Race Condition — операция возврата средств выполнялась не атомарно, а в языке смарт-контрактов отсутствуют Mutex'ы. fixed: На самом деле суть дыры заключалась в том, что вместо адреса получателя доли можно было передать адрес другого смарт-контракта, который внутри себя мог попробовать еще раз запросить возврат средств до того, как главный контракт зафиксирует первый возврат у себя. И так рекурсивно вывести всё.
Так злоумышленники вывели на свои счета более $65 млн. Началась паника. Даже несмотря на то, что дыра была не в Ethereum, а в коде смарт-контракта, истерия обрушилась на самих создателей Ethereum. Толпа требовала «всё закрыть и откатить», а это просто невозможно в блокчейне. Безвыходная ситуация — ты вроде сделал хорошо, а всё равно виноват.
Это краткий пересказ истории с The DAO, за подробностями можно пройти в статью крах The DAO и разделение Ethereum.

Выхода было два: подарить злоумышленникам украденные деньги и смириться, либо «остановить» блокчейн, обновив все клиенты, откатиться до ранних блоков и запустить всё заново — по сути разделить блокчейн, сделать хард-форк. Был выбран второй вариант. Так появилось два блокчейна — Ethereum и Ethereum Classic.
Это был сильный удар по сообществу. Многие до сих пор не могут принять такое стороннее вмешательство в их независимый децентрализованный мир. «Если создатели в любой момент могут поступить так с нашими деньгами — как мы можем доверять такому блокчейну», кричали они на форумах и реддите, и были в чем-то правы. Представляю каково было простым пользователям, которые в это время купили ETH где-нибудь в обменнике.
Очень неприятная история. Зато теперь, когда вы захотите отделаться от приставшего на улице криптоанархиста, просто прокричите ему в лицо пару раз «The DAO» и «ХАРДФОРК». Он упадёт и заплачет.
А вот про «пузырь», «пирамиду» и «МММ» не кричите. Это давно никого не задевает вообще.

Есть популярная аналогия: «Bitcoins is Gold, Ethereum is Oil».
Биткоин — это золото. Редкий мягкий металл, бесполезный в быту. Из него нельзя построить дом или сделать оружие, но оно приобретает ценность когда весь мир договаривается использовать его как универсальную валюту для расчетов между собой. Поэтому золото стоит очень дорого.
Ethereum — это нефть (хотя мне больше по вкусу аналогия с Электричеством). Нефть можно добывать не только ради продажи. Вы всегда сможете использовать её для отопления, получения энергии или бензина для работы техники и заводов. Даже если никто не захочет покупать вашу нефть, она решает реальные прикладные задачи — помогает людям существовать и выживать. Как и электричество.
Мне нравится эта аналогия. Она показывает, что между Биткоином и Эфиром нет конкуренции — никто ведь не скажет, что завтра нефть сможет заменить золото или наоборот. Это два независимых ресурса, которые могут двигать всех нас вперед. А могут и рухнуть завтра как Римская Империя. Кто знает.
Спасибо каждому, кто дочитал пост до конца. Поздравляю, вы стали немного лучше понимать будущее.
- How does Ethereum work, anyway? — самая полезная статья, которую я смог нарыть. Некоторые вещи взял оттуда, автор молодец
- CoinDesk: A Beginner's Guide to Blockchain Technology — большой гайд по блокчейну вообще
- Ethereum Whitepaper — главный документ по устройству Ethereum. На удивление легко читается, моего английского даже без словаря хватило
- Перевод Ethereum Whitepaper — для тех, кому совсем тяжело в английский. Перевод правда неполный, немного устаревший и со странными комментариями переводчика
- Ethstats — залипательная страничка, где можно понаблюдать за работой сети в прямом эфире
- Что такое Ethereum и как он работает? — короткий поверхностный видос, но на редкость нормальный
- Обзор альтернатив Proof of Work. Часть 1. Proof of Stake — краткое объяснение принципов работы Proof-of-Stake