В начале лета 2016 года произошло экстраординарное событие: у пользователей криптовалюты Ethereum (аналога BitCoin) увели в общей сложности около 150 миллионов долларов. Как же это произошло, если всем известно, что распределенные системы электронных денег невозможно взломать?

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

Правила контракта просты и прозрачны — казалось, ничего непредвиденного произойти не может. Участники проекта вложили в дело огромную сумму — более 150 миллионов долларов. Но 17 июня 2016 года произошло нечто странное: со счета DAO стали уходить деньги. Они по какой-то загадочной причине оказывались у одного из участников проекта, который определенно не мог претендовать на эти суммы. Тем не менее условий контракта он не нарушал.

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

Ethereum и умные контракты

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

Каждая операция в криптовалюте сопровождается «умным контрактом» — программой, визирующей выполнение всех правил системы при совершении транзакции. В Bitcoin эти соглашения достаточно ограниченны, но в Ethereum они могут выполнять практически любые действия. Поскольку действия по электронному контракту совершают не люди, а компьютеры, и он вписан в блокчейн, его невозможно нарушить, отменить или обойти.

По идее, это должно обеспечивать абсолютную безопасность транзакций и соблюдение «конституции» криптовалюты. Не нужны суды для разрешения споров, регуляторы и прочие институты ограничения и подавления. Все работает само по себе, как в либертарианской утопии.

DAO

DAO как раз и представляет собой такой «умный контракт», на основе которого создана соответствующая организация. Ее основал немецкий стартап Slock.it, разрабатывающий электронные дверные замки, в надежде таким образом привлечь инвестиции. Контракт был очень сложным — он полностью описывал все правила функционирования организации: накопление капитала в первые 27 дней, приобретение токенов для голосования по инициативам коллектива, распределение прибыли и так далее.

К сожалению, несмотря на то что над DAO работали опытные специалисты и его проверяли эксперты, в него закралась ошибка. Дело в том, что если участник DAO хочет выйти из организации, ему как-то нужно вернуть вложенные деньги. Для этого контракт разветвляется — создается его дочерняя организация, куда переводятся средства из основной, и только потом их можно вывести в эфиры и положить на счет. Однако в результате ошибки в коде эту операцию оказалось возможно повторять бесчисленное множество раз, чем и воспользовался злоумышленник. За короткое время он перевел в свою дочернюю организацию сумму, равную примерно 50 миллионам долларов.

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

Безвыходная ситуация

Участники DAO ничего не могли поделать в сложившейся ситуации. Основатели проекта предложили пользователям попробовать самим сломать систему — опубликовали код, который в случае массового исполнения замедлит атаку и позволит выкроить время на поиск решения проблемы.

Создатель Ethereum, программист Виталик Бутерин, предложил осуществить так называемое мягкое ветвление ПО криптовалюты, в результате которого правила транзакций изменились бы. Новые положения предполагали невозможность перевода средств в дочерние DAO злоумышленника, которые необходимо было занести в черные списки основных узлов-майнеров, визирующих операции.

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

Временное решение проблемы нашли в фонде Ethereum, который занимался развитием системы. Что делать, если деньги украдены, их никак нельзя вернуть, а дыра, через которую они утекали, продолжает зиять? Правильно, попробовать сохранить оставшиеся, находящиеся в проекте DAO. Инициативная группа участников решила стать Робин Гудами — увести деньги из основной организации в другую, дочернюю, воспользовавшись тем же методом, что и злоумышленник.

Проверив свой метод на тестовой сети Ethereum, они запустили контратаку, выкачав 7,6 миллионов эфира (примерно 105,7 миллионов долларов на тот момент) в два дочерние DAO, что составляет около 70 процентов активов изначального проекта. Впрочем, учитывая, что дочерние организации основаны на все том же коде, увести из них деньги не составляло труда с помощью того же метода. И действительно — впоследствии оказалось, что в ряды Робин Гудов просочился один из злоумышленников.

Жесткое ветвление

Единственным возможным исходом оставалось жесткое ветвление криптовалюты. В этом случае все деньги должны были вернуться на счета участников DAO — так, словно контракта и не было, а его бы аннулировали. Но для этого абсолютно все пользователи Ethereum должны были поменять свой софт на новый, поддерживающий новую ветку блокчейна.

Так и сделали. Жесткое ветвление произошло 20 июля 2016 года. Средства проекта DAO были возвращены владельцам токенов. Впрочем, далеко не все пользователи решили перейти на новое ПО, некоторые остались в старой ветви Ethereum.

Это значит, что фактически криптовалюта раздвоилась — теперь существует две ее версии, работающих по практически идентичным правилам. Только в одной версии средства, уведенные с DAO, до сих пор находятся в руках злоумышленников, а в другой справедливость восстановлена. У этих криптовалют разные курсы обмена и с определенного момента разный блокчейн.

Что же случилось с деньгами, которые увели Робин Гуды? Этот вопрос до сих пор не решен: раздавать «награбленное» сложно, и многие пользователи небезосновательно предполагают, что кто-то из этих людей потихоньку попытается выкачать средства в свою пользу.

Все это похоже на финансовую версию квантовой теории множественности миров: во время коллапса квантовой функции появляются миры с разными его исходами. Реальность разветвилась.

Гнев либертарианцев

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

Форумы, на которых общались участники, забурлили. Вдруг, в одночасье, образовалось регулирование, правопринуждение, наказания и даже какая-то демократия с голосованиями за и против. Несогласные смотрели и говорили: это не то, на что мы подписывались. Злоумышленник — законный обладатель этих денег по закону гор, и только так. Они хвалили его за ум и смекалку.

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

Победа коммунизма

Чем эта история интересна? Во-первых, автономная программа, самостоятельно распоряжающаяся 150 миллионами долларов, — это нечто доселе невиданное.

Во-вторых, в Ethereum была впервые реализована возможность жесткого ветвления криптовалюты, и это тоже первый опыт. Он открывает богатые возможности для госрегулирования подобных проектов, а также для воровства. Криптовалюты запрещали во многих странах, ссылаясь на их неподконтрольность государству. Оказалось, управлять ими еще как можно.

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

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

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

http://olegchagin.livejournal.com/540585.html