Инвесторы, подписавшие «умный контракт» на платформе блокчейна Ethereum, рискуют потерять криптовалюту стоимостью в миллионы долларов. Причиной всему лазейка, которая, как водится, скрывается в условиях договора, напечатанных мелким шрифтом.
Сам договор написан на языке программирования Ethereum Solidity, а в качестве мелкого шрифта выступает код, устанавливающий правила инвестирования, выполнения операций и выхода из краудсорсингового венчурного фонда The DAO (The Distributed Autonomous Organization).
Как и другие блокчейны, Ethereum представляет собой распределенный общедоступный журнал записей транзакций. Но если записи журнала биткойна регистрируют транзакции биткойна, то записи блокчейна Ethereum фиксируют операции с криптовалютой «эфир» (ether). Кроме того, Ethereum выступает в качестве платформы для регистрации умных контрактов. Ее создатель, организация Ethereum Foundation, описывает умные контракты как «приложения, выполняющиеся в точности так, как это было запрограммировано – никаких задержек, цензуры, обмана и постороннего вмешательства».
В какой-то степени все это действительно так. Контракты DAO выполнялись в точном соответствии с тем, как это было запрограммировано, но не так, как представляли себе их участники.
Один из инвесторов заметил это. И воспользовался лазейкой, позволявшей переводить криптовалюту эфир, хранившуюся в DAO, на другой «дочерний» счет DAO. По условиям договора, отзывать средства с дочернего счета разрешается только после завершения периода ожидания продолжительностью 27 дней. Зато после этого теоретически никаких препятствий возникнуть не должно. Ведь в среде Ethereum программный код – это закон.
Лазейка, получившая название «уязвимости рекурсивных вызовов» или «гонки на опустошение», была замечена сразу в нескольких умных контрактах Ethereum. Разработавшая архитектуру DAO компания Slock.it заявила, что программный код исправлен, призвав всех установить новую версию. Вместе с тем было указано, что целый ряд особенностей не позволяет воспользоваться этой уязвимостью в DAO.
«Сегодня фонды DAO не подвержены никаким рискам», – заверил основатель Slock.it Стивен Туал.
Но, как выяснилось, другие факторы не обеспечивают полноценной защиты DAO.
Использование обнаруженной лазейки и рекурсивного вызова кода позволяет инвестору выводить деньги из контракта. Сначала программный код регистрирует платеж и только потом списывает соответствующую сумму из доступных инвестору средств. Если же программа будет вызвана до завершения операции списания, оставшимися на счету средствами можно оплачивать свои расходы снова и снова. Это примерно то же самое, что подать запрос на снятие всех денег со счета, получить наличные, а затем снова снять ту же сумму, не дав кассиру возможность обновить баланс.
Возникновение условий для проведения мошеннических операций будет зависеть от того, действует ли инвестор в духе общественного договора или же его операции проводятся в соответствии с буквой умного контракта.
А что, если это не мошенничество, а взлом, как считают некоторые?
«Я не уверен, что это можно квалифицировать как взлом, – заметил преподаватель Корнельского университета Эмин Сирер. – Чтобы назвать что-то взломом или ошибкой, или нежелательным поведением, нам нужны спецификации желательного поведения. В отношении DAO такими спецификациями мы не располагаем. Независимых спецификаций того, что планировалось реализовать в DAO, у нас нет».
Все это очень плохо не только для инвесторов DAO, чьи деньги утекают в неизвестном направлении. Возникшая ситуация представляет собой системную проблему для всей платформы Ethereum.
Сегодня в фонд DAO инвестировано больше одной десятой части из всех существующих 81,2 млн эфиров. Возникший кризис доверия привел к резкому снижению стоимости эфира. Всего за четыре дня она снизилась с 20,51 долл. до 11,81 долл. за один эфир. Таким образом, экономика Ethereum потеряла 700 млн долл.
Чтобы восстановить доверие и предоставить инвесторам DAO возможность вернуть свои деньги, Ethereum Foundation предложила изменить основные правила, представив некий аналог поправки к конституции, позволяющей заморозить счет, на который были выведены средства из фонда DAO.
«В этом случае у нас появится время для обсуждения дальнейших шагов, которые позволили бы прежним владельцам вернуть свои эфиры», – написал в блоге фонда основатель Ethereum Виталик Бутерин.
Но фонд не может навязывать свои резолюции. Владельцам компьютеров, обслуживающих распределенную систему (и играющих ту же роль, что и те, кто добывает биткойны), предстоит решить, согласны ли они с изменением кода. Если большинство выразит свое согласие, предложение будет считаться принятым.
В каком-то смысле для основателей Ethereum плох любой вариант развития событий. Защищая интересы инвесторов DAO и вмешиваясь в условия контракта, они нарушают основной принцип Ethereum, в соответствии с которым умный контракт выполняется в точности так, как это было запрограммировано изначально, без какого-либо вмешательства извне. Если же ничего не делать, им остается лишь ждать, пока кризис доверия к DAO распространится на остальную часть платформы и окончательно похоронит ее.
Для инвесторов DAO возникшая ситуация станет окончательной проверкой на то, готовы ли они оставаться частью децентрализованной экономики, для которой характерно отсутствие центральной власти, которая могла бы выносить окончательные суждения и инициировать возмещение ущерба.