Лора Шин – На шифре. Инсайдерская история криптовалютного бума (страница 38)
В то же время Кристофу из Slock.it казалось, что его жизнь рассыпается на глазах. Он проработал в Ethereum уже почти два года и любил его. Ради него он бросил диссертацию. Его первой обязанностью в Ethereum было вылавливать баги, случайно вызывающие сплиты. А теперь он сам стал участником сплита, и казалось, что он подвел своих друзей. Еще Кристоф чувствовал ответственность перед всеми вкладчиками The DAO. Особенно тяжело пришлось бы новичкам из числа 15–20 тысяч держателей токенов, если при первом знакомстве с Ethereum они остались бы без денег.
Он решил во что бы то ни стало разрулить эту проблему. Пока остальные писали софтфорк для клиентов Geth и Parity (до того, как стало известно о потенциальных DoS-атаках), он думал только о хардфорке. У него было пятеро детей (одному – пять месяцев), но он о них практически позабыл. Ушел из соцсетей. Переехал к родителям. Там встречались он, Грифф и Саймон, пока его мать молча приносила рагу из говядины с картошкой и морковью или азиатскую лапшу из магазина. Грифф, бывший врач-массажист, видел, как напряжен Кристоф, и иногда разминал ему плечи. Стараясь не задумываться о возможных исках, Кристоф верил: с поддержкой Бога, жены и семьи худшее, что может с ним случиться, – это если он потеряет все свои деньги навсегда. Каждый день он гулял по часу и молился больше обычного, сблизившись с Богом как никогда в жизни.
Тяжелее всего было то, что для исправления ситуации ему приходилось руководить людьми, над которыми он не имел никакой власти. Нужно было обновлять клиенты протокола Ethereum, а он уже не работал в EF. В первые дни работы в Ethereum он предотвращал хардфорки. Тогда его даже не замечали. Теперь же он без конца писал посты, комментарии на Reddit, общался с программистами фонда и созванивался с Мин и Виталиком. Но фонд не желал брать решение на себя. Он предлагал решать сообществу. А поскольку в Ethereum нет формального управления, получалось, что люди в интернете просто переливали из пустого в порожнее.
И в интернете царил хаос. Все изображали из себя философов, размышляя на тему, является код законом в последней инстанции или нет. Глядя на их дебаты, Кристоф думал: «Это свободный рынок. Если они хотят навсегда оставить цепочку с The DAO и краденными средствами – пожалуйста. Решать только им». Он писал хардфорк, хотя и не представлял, понадобится ли он вообще. Впрочем, откровенно говоря, ни один вариант не был идеален. Если выбрать хардфорк, это решит проблему с The DAO, но повредит Ethereum. Софтфорк выглядел перспективнее, пока не оказался неосуществимым, – и от него отказываться было еще обиднее из-за утраты обязательных одно- и двухнедельных периодов ожидания для разных процессов, которые давали больше времени на поиск решения.
Но, написав код для хардфорка, посмотрев результаты голосования на carbonvote.com и увидев, как форумы и петиции демонстрируют 80–90-%-ную поддержку хардфорка, Кристоф зашел в чат скайпа, насчитывающий 150 человек – программистов Ethereum, кураторов The DAO, крупных инвесторов и других влиятельных лиц, и сообщил, что сообщество сделало выбор. Он показал свои спецификации хардфорка. Люди из Slock.it и EF тут же начали перекладывать ответственность друг на друга. Никому не хотелось стать тем, на кого покажет регулятор и скажет: «Это ты принял решение». EF не собиралось официально участвовать в этой ситуации с The DAO, и Кристофу оставалось искать кого-нибудь в Ethereum, кто внедрит хардфорк. Гэвин имплементировал его в Parity без промедления, но Parity охватывал лишь небольшую долю нод[18] сети, поэтому на самом деле Кристофу требовался клиент Go. Джефф как раз ушел в отпуск перед рождением первенца, но Кристоф договорился с Петером Силадьи, старшим разработчиком в команде Джеффа.
В конце концов определились и с тем, как конкретно поступать с экстрабалансом и другими нестандартными случаями. Группа программистов, в том числе первоначальные кураторы DAO Виталик и Влад, договорились распределять средства законным владельцам из мультисига.
17 июля Виталик выложил на Reddit пост с объяснением, что будет дальше: «С блока 1920000 начнется ХФ [хардфорк], и, по сути, появятся две цепочки: одна – с нестандартным изменением состояния, имплементированным в код Geth 1.4.10, другая – без. После этого можно ожидать, что одна ветка станет доминантной, а вторая либо забудется, либо продолжит существование и даже сохранит рыночную стоимость».
Позже Виталик скажет, что не сомневался в сохранении оригинального блокчейна, но тогда рекомендовал всем, кто хочет попасть в доминантный блокчейн, «воздержаться от экономических действий с блока 1920000 до момента, когда хардфорк „устаканится“ и станет ясно, какая именно ветка доминантная (примечание: некоторые биржи уже последовали этому совету, отключив депозитный функционал на 1 час)».
Он предложил контракт защиты от повтора, чтобы отправлять монеты в одной цепочке, а не в другой, но, как отметили на Reddit, это находилось далеко за пределами технических знаний большинства пользователей. Те, кто не умел этим пользоваться, при продаже монет, от которых хотели избавиться, – скажем, ETH-оригинала, – рисковали заодно потерять и свой ETH.
Петер Силадьи, помощник Джеффа, внедрил часть кода хардфорка. Клиент добавлял флажок – оставаться в оригинальном блокчейне или перейти в сплит. Голосование на carbonvote.com и другие опросы показали, что большинство предпочтет новую цепочку; в таком случае, если ее поддержит больше компьютеров, будет генерироваться больше блоков и она станет длиннее. Тут Петер понял: если новый блокчейн станет длиннее, оригинальный в принципе не выживет, потому что ноды синхронизируются с более длинной базой данных, и тогда попасть в оригинал станет уже просто невозможно – даже если поставишь флажок. Петер переделал все так, чтобы, если какие-то майнеры действительно захотят поддерживать жизнь в оригинале, они смогли бы это сделать даже в том случае, если новая цепочка станет длиннее.
Теперь EF мог с чистой совестью сказать, что люди сами выбирают блокчейн и фонд их ни к чему не принуждает.
Оставалось написать только контракт вывода средств, и это вызвался сделать Ник Джонсон – бывший работник Google, ныне разработчик Geth. Хватило всего двадцать одной строчки кода, чтобы контракт выдавал тому, кто пришлет токены DAO, соответствующее число ETH.
В среду 20 июля летняя утренняя прохлада в Итаке, штат Нью-Йорк, уступила жаре в 27 градусов. В этот день Инициатива криптовалют и контрактов (IC3) Корнелльского университета начинала курс в летнем учебном лагере и творческую мастерскую на тему Ethereum. Но сначала все ждали, когда Ethereum проведет хардфорк.
Вскоре после 9:15 по североамериканскому восточному времени Виталик, Кейси Детрио (парень Мин), Авса и другие разработчики, в том числе Мартин Бече из Индианы, сидели на летней веранде кафе в «Билл и Мелинда Гейтс-Холл» с видом на атриум и бейсбольное поле. На Кейси была футболка с надписью «Шрирача ОСТРЫЙ соус чили», а Виталик был одет в футболку с огромным рисунком кошачьей головы и передних лап, сжатых в кулаки. На столе лежал чехол для ноутбука с рисунком черной кошачьей мордочки с фиолетовыми глазами, а также ноутбуки, на одном из которых красовалась надпись «Это не баг, а фича».
Уткнувшись в экраны, они следили за процессом на fork.ethstats.net. Авса сидел вместе с Виталиком за его Lenovo. Блокчейн постепенно рос по мере того, как люди майнили эфиры.
В 9:20:40 появился блок 1920000:
1920000
0x498515ca
0x94365e3a
На экране Виталике вертикальная черта, соединявшая блоки 1919996, 1919997, 1919998 и 1919999, разбилась на две, и новая линия свернула к хешу 0x94354e3a, показывая зарождение второй цепочки.
– Оке-е-ей! – осторожно протянул Авса.
Виталик посмеивался и раскачивался взад-вперед, излучая одновременно нервозность и облегчение.
– Йе-е, – выдавил он.
– Дело пошло, – сказал Авса.
– Форк удался? – спросил Авса, снимая на телефон. Потом улыбнулся в камеру, будто делал селфи, – за его спиной сидел в профиль, глядя на экран ноутбука, Виталик со все еще широкой улыбкой. Он водил длинными пальцами по крышке одноразового стаканчика кофе.
На уровне блока 1920005 в новом Ethereum старая цепочка все еще была на блоке 1920001.
Позже, в лагере IC3, Гюн разливал шампанское из бутылок, на которые наклеил этикетки с надписью «Поздравляю с успешным хардфорком!» и рисунком вилки.
В честь тоста коллега Гюна Элейн Ши подняла пластиковый стаканчик с пластиковыми вилками, а Гюн и Виталик взяли по бутылке шампанского. Гюн показал, как выкручивать пробку.
– Готов? – спросил он. – Раз, два, три!
Пробка Гюна хлопнула. Виталик отстал на секунду и скривился от напряжения. Хлоп! Из горлышка поплыл дымок. Виталик рассмеялся.
Далеко на севере Германии, у Балтийского моря неподалеку от Копенгагена, под широким небом среди высокой травы, качающейся на ветру у пляжа Баабе, лежал на белом песке Кристоф и прокручивал ленту в телефоне.
Было 15:20 20 июля, и он следил за форком. Увидев, что он прошел успешно, Кристоф наконец выдохнул. В тот день он выложил в Medium пост с заголовком: «Какое достижение!»
«Если не рассматривать вопрос, стоило или не стоило, собственно, делать хардфорк из-за The DAO, сам факт, что сообщество Ethereum (разрабы, майнеры, биржи, исследователи…) сплотились, часто отодвигая на второй план свое личное мнение, и успешно провели хардфорк в такой ситуации, поистине поразителен», – написал он. Поблагодарив ряд людей за помощь в спасении средств The DAO и создании хардфорка, он словно подсознательно пытался сказать: «Смотри, SEC, эфир – не ценная бумага, потому что мы не централизованы!» – и закончил словами: «Хотя кое-кто сомневается во фразе „Код есть закон“, я – нет. Мы только что обнаружили, что у нас есть верховный суд – сообщество!»