В начале лета 2016 года произошло экстраординарное событие: у пользователей криптовалюты Ethereum (аналога BitCoin) увели в общей сложности около 150 миллионов долларов. Как же это произошло, если всем известно, что распределенные системы электронных денег невозможно взломать? «Лента.ру» разобралась, почему ограбление века стало возможным.
Проект DAO был идеален: он позволял людям заработать деньги, вложив их в общее дело. Принцип его прост: люди вкладывают свои средства, а взамен получают так называемые токены, с помощью которых голосуют за то, куда инвестировать общий капитал. Прибыль, получаемая в результате, должна была распределяться между участниками инициативы.
Правила контракта просты и прозрачны — казалось, ничего непредвиденного произойти не может. Участники проекта вложили в дело огромную сумму — более 150 миллионов долларов. Но 17 июня 2016 года произошло нечто странное: со счета DAO стали уходить деньги. Они по какой-то загадочной причине оказывались у одного из участников проекта, который определенно не мог претендовать на эти суммы. Тем не менее условий контракта он не нарушал.
Если бы это случилось в реальном мире, люди могли бы обратиться в суд, собраться и переписать контракт, позвонить в банк и попросить заблокировать счет… Но, увы, описанные события происходили в интернете, вложенные деньги исчислялись не в долларах, а в эфирах — единицах распределенной криптовалюты Ethereum, а контракт представлял собой машинный код, который невозможно изменить, не обрушив всю систему.
Ethereum — это распределенная криптовалюта, как и известный многим биткоин. Ее денежные единицы выпускаются системой как вознаграждение за проверку операций пользователями на своих компьютерах. История транзакций хранится в блокчейне — специальном журнале, состоящем из последовательных блоков информации, добавляемой только в определенном правилами порядке, и вставить блок в произвольном месте не получится.
Каждая операция в криптовалюте сопровождается «умным контрактом» — программой, визирующей выполнение всех правил системы при совершении транзакции. В Bitcoin эти соглашения достаточно ограниченны, но в Ethereum они могут выполнять практически любые действия. Поскольку действия по электронному контракту совершают не люди, а компьютеры, и он вписан в блокчейн, его невозможно нарушить, отменить или обойти.
По идее, это должно обеспечивать абсолютную безопасность транзакций и соблюдение «конституции» криптовалюты. Не нужны суды для разрешения споров, регуляторы и прочие институты ограничения и подавления. Все работает само по себе, как в либертарианской утопии.
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, поддержали и провели его совершенно демократически, снизу, а не сверху. Это необычно даже для интернета. Сообщества, особенно большие, редко бывают демократическими. Можно сказать, что коммунистический подход в этой ситуации победил индивидуалистический, либертарианский.