Лора Шин – На шифре. Инсайдерская история криптовалютного бума (страница 32)
В четверг, в 11:58, хакер попытался обменять биткойны на сумму 500 долларов (0,677 BTC) на ShapeShift, но деньги вернулись. На ShapeShift возможны два типа транзакций: быстрый или точный. Хакер выбрал точный, то есть должен был выслать деньги в течение десяти минут, иначе ордер закрывается. Иногда пользователи не делают это вовремя, особенно если не знакомы с процедурами.
В 12:46, словно не понимая, что произошло, хакер написал в ShapeShift, используя почтовый адрес в Mailinator. (Mailinator – работающая только на прием почтовая система, где можно создать имейл, чтобы указать его в графе, скажем, службы поддержки билетной кассы, а ответ будет публичным, открытым для всех и будет удален спустя несколько часов. Это позволяет отправителям скрывать свою личность.)
Хакер создал адрес Dephisicru@mailinator.com. Указав номер транзакции, он оставил простую просьбу службе поддержки ShapeShift – и это до сих пор одно из немногих обнаруженных посланий, достоверно поступивших от хакера: «проверьте ордер, пожалуйста».
В службе поддержки объяснили: «Закончился таймер вашего депозита, транзакцию невозможно завершить. Но мы вернули ваши BTC, как указано здесь: http://blockr.io/tx/info/afd6fc9cb2910445b126cbfd8a8dd58b4d5359356688f416635c12b15fcab7bf».
Хакер, несмотря на свои намерения, явно не был знаком с порядками этой криптобиржи, известной тем, что не спрашивает у пользователей личные данные. В 13:11 по берлинскому времени он послал еще один запрос в службу поддержки: «пожалуйста, проверьте ордер».
Когда ему через пять часов ответила «Меган Мемпул» (Мемпул – на блокчейновом жаргоне вымышленное имя, имярек), хакер уже получил средства, переведя 1,236 BTC в 48,88 ETH (919 долларов) и отправив на тот же адрес 0x969.
В 16:24 Dephisicru@mailinator.com послал третий запрос, по которому, несмотря на лаконичность, видно владение и английским, и криптосокращениями: «токенов dao все еще нет. должна быть эта tx [транзакция]. пожалуйста пошлите хеш tx возмещения или токены dao. спасибо».
Меган Мемпул сказала, что транзакция не прошла, и вернула ему BTC.
В 18:13 хакер, видимо, освоившись с ShapeShift и уже не нуждаясь в службе поддержки, конвертировал 0,667 BTC в 25 ETH (около 4 тысяч долларов), затем обменял небольшую сумму в биткойнах на 15 ETH (2 500 долларов) и купил еще 1 300 токенов DAO на 2 тысячи, отправив все на адрес 0x969. Это произошло в 18:43 по берлинскому времени во вторник 16 июня.
На адресе 0x969 хакер, потратив 10 BTC, собрал 25 805,61 токена DAO (4 563 доллара) и 139 ETH (2 274 доллара). Всего – 7 377 долларов.
Во время транзакции соотношение токенов DAO к ETH составляло 100:1, поэтому контракт давал 25 806 токенов за 258,06 ETH. И, соответственно, благодаря изъяну в программе обновления баланса только эту сумму хакер и мог забирать из The DAO каждый раз, когда выводил деньги. А шлюпка – дочерняя DAO – уже поджидала на воде.
На следующее утро, в 5:34:48 по берлинскому времени, началась атака.
В ту пятницу, к часу дня по берлинскому времени (19:00 в Шанхае), когда транши по 258 ETH уходили из главной DAO до десяти раз в минуту, Виталик написал пост, объяснив, что из-за «уязвимости рекурсивного вызова» эфир из The DAO уходит в дочернюю DAO. Однако, добавил он, «даже если ничего не предпринимать, хакер не сможет вывести эфир по крайней мере еще ~27 дней (окно создания дочерней DAO). Эта проблема касается только The DAO; Ethereum в полной безопасности».
Он сообщил, что в первую очередь разработчики рассмотрят вариант софтфорка – то есть они не будут менять историю блокчейна, но изменят правила на будущее, чтобы хакер больше не смог поступить так с The DAO или любыми дочерними DAO. Это помешает ему (но при этом и всем остальным вкладчикам The DAO) вывести деньги даже по истечении двадцати семи дней.
Виталик предложил делать софтфорк, начиная с блока 1760000, который с высокой вероятностью выпадал на период в 27 дней. Напоследок он предостерег авторов смарт-контрактов от того, чтобы писать код с уязвимостью к рекурсивным вызовам и создавать контракты больше чем на 10 миллионов долларов (читай: конец неограниченным продажам токенов). Он не упомянул, что на всякий случай готовится и хардфорк.
После публикации его пост перестал открываться от наплыва пользователей, и людям пришлось скопировать текст на Reddit, чтобы его прочитали другие.
Как это ни удивительно, в 13:00 по берлинскому времени, вскоре после поста Виталика, атака прекратилась. К этому времени хакер собрал 3 641 694 ETH – 78 миллионов долларов по верхней стоимости ETH в тот день, 49 миллионов по нижней. Он вытянул 31 % всего ETH, хранящегося в The DAO. Никто не знал, почему он остановился, но команда Slock.it и другие разработчики предполагали, что, увидев угрозу Бутерина, преступник решил попробовать избежать софтфорка, забрав лишь часть ETH. (Несколько лет спустя Грифф предположит, что у хакера просто перестал работать контракт.)
День эксплойта стал настоящим адом для держателей ETH и токенов DAO. В день самого крупного объема торговли эфиром – когда из рук в руки переходило более 199 миллионов долларов – стоимость Ethereum рухнула с 21 доллара перед атакой до 14 после. Из-за потери 31 % ETH и обвала стоимость The DAO, которая еще утром составляла около 250 миллионов, в нижней точке 17 июня скатилась до 109 миллионов. Люди торопились избавиться от своих токенов, и цена рухнула с 0,19 доллара в предыдущий день до 0,06 доллара; на следующий она сползла до 0,05 доллара. Те, кто в панике продал свои токены DAO, потерял около двух третей вложенных средств. Пара десятков человек провели сплит, создав дочернюю DAO, но и при этом они выводили только 69 % принадлежавшего им эфира.
Несмотря на драматизм событий, напрашивался философский вопрос: взлом ли это? Или вообще ограбление? Может показаться, что это всего лишь умозрительный вопрос об очевидно неэтичном поступке. Но Виталик, исследователь до мозга костей, запостил в блоге текст на эту тему, который бурно обсуждали в сообществе. Поскольку коду разрешалось выводить эфир в дочернюю DAO и, поскольку девиз The DAO – «Код есть закон», рекурсивный вызов можно было рассматривать как законное использование контракта. Виталик делал вывод: кража или потери из-за смарт-контракта, «в сущности, зависят от разницы между реализацией и намерениями». Отсюда следует решение: укрепить безопасность, чтобы снизить вероятность таких промашек.
Человек, назвавшийся взломщиком, написал менее философскую версию этого поста, которая начиналась так:
Для The DAO и сообщества Ethereum.
Я внимательно изучил код The DAO и решил поучаствовать в проекте, найдя возможность, благодаря которой сплит вознаграждается дополнительным эфиром. Я воспользовался предоставленной возможностью и законно приобрел 3 641 694 эфиров, и хотел бы поблагодарить The DAO за это вознаграждение…
Я разочарован теми, кто считает использование этой умышленно созданной возможности «кражей». Я пользуюсь кодом в соответствии с условиями смарт-контракта, и моя юридическая фирма уведомила меня, что мои действия целиком соответствуют уголовному и гражданскому праву Соединенных Штатов. Для справки см. условия The DAO:
«Условия Создания The DAO представлены в виде кода смарт-контракта, существующего в блокчейне Ethereum под транзакцией 0xbb9bc244d798123fde783fcc1c72d3bb8c189413. Ни это объяснение, ни какие-либо другие документы или сообщения не могут изменить существующий код The DAO или добавить новые обязательства или гарантии. Любые объяснения или описания существуют только для ознакомления и не заменяют и не изменяют договорные условия кода The DAO в блокчейне. Если вы считаете, что между данным описанием или функционалом кода The DAO под транзакцией 0xbb9bc244d798123fde783fcc1c72d3bb8c189413 существуют конфликты или расхождения, обратите внимание, что все условия Создания The DAO контролируются кодом The DAO».
Также он заявил, что «софт- или хардфорк будут приравниваться к конфискации эфира, принадлежащего мне по праву и полученного законными методами в соответствии с условиями смарт-контракта» и что хардфорк «перманентно и неисправимо разрушит все доверие не только к Ethereum, но и к области смарт-контрактов и технологии блокчейна».
Пользователи Reddit писали под постом Виталика об атаке и софтфорке похожие комментарии: «Я сделал плохой контракт в первые дни ETH и потерял 2к ETH, можно их тоже вернуть?» IAMnotA_Cylon ответил: «Я знаю, что это шутка, но в ней только доля шутки. Ethereum работал именно так, как задумано. Я не считаю, что протокол нужно обновлять, если он работает, как задумано. При инвестировании вы соглашаетесь с риском». Но другой пользователь съязвил: «Мужик, который угнал мою тачку, знает о проводке в ней больше меня. Значит, это не преступление».
Еще один комментатор подытожил дилемму так: «Ethereum должен решить: либо отдать „хакеру“ деньги, которые он получил по праву и по условиям смарт-контракта, либо в „смарт-контрактах“ нет смысла».
Пока сообщество билось над философскими вопросами, другой держатель токенов DAO решил подойти к ситуации совсем иначе. В начале 2016 года Андрей Терновский, учредитель и СЕО социального вебкам-феномена Chatroulette, переехал в Швейцарию, в Цуг, ради более выгодного налогообложения, а также близости к университету. Несколько лет назад, когда он разместил на своем сайте рекламу от Google AdSense, Google закрыл его аккаунт, потому что ему было всего семнадцать лет. Позже технологический гигант послал ему чек в Россию. Терновский полагал, что чеки существуют только в кино, и подумал: «Почему Google шлет чеки? Что мне вообще делать с чеком американского банка?» К тому же Google задавал самые разные вопросы и просил заполнить анкеты по юридическим причинам. Даже PayPal, созданный для онлайн-платежей, не устраивал Терновского. И тут он узнал о биткойне. Через него можно рассчитываться с пользователями напрямую. Никто не задает вопросов. Он тут же увидел его превосходство.