Размышление Джеймсона Лоппа, известного программиста и популяризатора Биткойна, о парадоксальных отношениях между личной свободой и зависимостью человека от общества, о социальной масштабируемости и общественном договоре Биткойна. Плюс глубокий анализ теории игр, стоящей за поддержанием точности временных меток Биткойна в качестве отступления и дополнительной «кроличьей норы».
- Что есть суверенитет?
- Суверенитет через математику и теорию игр
- Традиционное управление
- Социальная масштабируемость
- Права собственности
- Социальные контракты
- Общество добровольного участия и общество добровольного выхода
- Общественный договор Биткойна
- Суверенитет внутри системы, а не против неё
- Передача консенсуса через поколения
- Куда мы движемся?
Биткойн-энтузиасты часто говорят о концепции суверенитета; это ценность, которую мы ставим очень высоко. Способность действовать как суверенная единица в биткойн-экономике, самостоятельно управляя своими ключами, проверяя историю блокчейна и обеспечивая действие правил, с которыми вы согласны, — это то, что передаёт власть в руки индивидуальных пользователей, расширяя их возможности.
Однако в этом видении есть нюансы, которые стали для меня яснее, когда мы глубже изучили управление протоколом Биткойна после ожесточённых споров о масштабировании 6 лет назад. Подумайте вот о чём:
«Широкое распространение приватности требует, чтобы она стала частью общественного договора. Люди должны объединиться и использовать эти системы ради общего блага. Приватность будет поддерживаться только в том случае, если все члены общества объединятся для этого». (Эрик Хьюз, «Манифест шифропанка», пер. О. Турухиной)
Полагаю, что оборот насчёт «общественного договора» мог вызвать у внимательного читателя неоднозначную реакцию, но эту мысль мы рассмотрим подробнее позже. Я считаю, что эта цитата актуальна, поскольку она затрагивает вопрос, связанный с сетевыми эффектами. Хотя мы все являемся индивидуумами, если мы собираемся жить, взаимодействуя с другими людьми, то мы неизбежно полагаемся на определённый уровень сотрудничества. Это верно для экономических взаимодействий, коммуникаций и, конечно же, для любой другой сетевой деятельности, в том числе для совместного использования протоколов.
Попробуйте ещё раз вернуться к той же цитате из Эрика Хьюза, заменив в ней слово «приватность» на «суверенитет». В этом эссе я попытаюсь убедить вас в правомерности получившегося утверждения.
Человек — не остров,
но каждый, целиком, —
обломок континента,
часть простора.
И если море смоет глину,
Европа станет меньше,
как будто смыло мыс,
или усадьбу друга,
или твою усадьбу.
Любая смерть,
ты убавляешь и меня —
я сросся с остальными.
Не посылай слугу узнать,
по ком бьют в колокол —
бьют по тебе.
Если вы это читаете, крайне маловероятно, что вы являетесь «островом», не зависящим в своей повседневной жизни от взаимодействия с другими людьми.
Что есть суверенитет?
Суверенитет — это независимость; свобода действовать без необходимости спрашивать разрешения. Хотя это свойство часто приписывают государствам, человек тоже может стать суверенной личностью в определённой степени.
Существует множество аспектов жизни, в которых человек может быть суверенным. Биткойнеры, разумеется, сосредоточены в первую очередь на финансовом суверенитете.
Полный суверенитет на индивидуальном уровне сегодня практически невозможен из-за взаимосвязанности нашей экономики и общества. Это обусловлено специализацией задач: люди более продуктивны, когда сосредотачиваются на качественном выполнении одной конкретной задачи. В результате мы передаём многие аспекты нашей жизни сторонним специалистам, которые сравнительно хорошо справляются с предоставлением определённых товаров и услуг.
Даже если вы отшельник, «жилец вершин», обитающий в глуши и в основном независимый, маловероятно, что вы ведёте примитивный образ жизни. Даже такие люди в большинстве всё ещё зависят от цепочек поставок, которые время от времени обеспечивают их сырьём и высокотехнологичными предметами, которые они не могли бы создать с нуля. Их индивидуальные «острова» всё ещё имеют хрупкие мосты, связывающие их с обществом.
Суверенитет через математику и теорию игр
Как достичь финансового суверенитета с практической точки зрения? Начать, конечно, придётся… с начала.
Что такое блокчейн? Это цепочка блоков.
Я технарь. Когда люди говорят «блокчейн», я слышу «база данных». Когда люди рассуждают о «решении проблем с помощью блокчейнов», почти всегда они упускают из виду множество деталей, критически важных для архитектуры этих систем.
Создавая блокчейн, вы просто создаёте связанный список данных, новый тип структуры данных, криптографически связанных между собой. Такая структура данных обеспечивает нам свойство очевидности вмешательства. Это всё, что вы в действительности получаете в дополнение к упорядоченной истории событий. Вы можете сказать «это произошло после того». Хотя, если быть точным, основываясь только на структуре данных блокчейна, вы не можете быть уверены, что упорядоченная история, на которую вы смотрите, является истинной историей.
Большинство вещей, которые люди по умолчанию подразумевают, говоря о блокчейне, на самом деле не гарантируются самим блокчейном. Чем блокчейн не является?
- Это не сеть узлов.
- Это не протокол консенсуса.
- Это не неизменяемая история.
- Это определённо не арбитр истины.
- Это даже не надёжный сервис временных меток.
Сам по себе блокчейн даёт вам только доказательство несанкционированного вмешательства. Но вам также нужно множество других вещей, таких как proof-of-work или proof-of-stake, или какой-либо ещё механизм консенсуса, который сделает очень дорогостоящим для кого-либо переписывание блокчейна. Вам нужна сеть узлов, чтобы обеспечить точность истории. Вам нужны конкретные правила консенсуса, чтобы гарантировать, что временные метки блоков находятся в определённом диапазоне.
О безопасности временных меток Биткойна
Спин-офф с глубоким анализом теории игр, стоящей за поддержанием достаточной точности временных меток блоков Биткойна.
[ Раскрыть ]
Довольно часто о Биткойне говорят также как о надёжной службе проставления временных меток. Никогда прежде у нас не было глобальной записи «истины» с достоверными временными метками. Как же это стало возможным? В основном благодаря proof-of-work в сочетании с несколькими простыми правилами, которым должны следовать майнеры. Основные функции майнеров заключаются в следующем:
- взять неупорядоченные неподтверждённые транзакции и расположить их в определённом порядке;
- объединить транзакции в валидный контейнер (блок);
- поставить временную метку на блок в приемлемом временном диапазоне.
Этот последний атрибут позволяет Биткойну контролировать выпуск BTC. В противном случае Биткойн страдал бы от быстрой инфляции всякий раз при увеличении хешрейта. Но оказывается, что этот атрибут придаёт протоколу Биткойна дополнительную полезность, делая возможным использовать Bitcoin для якорной привязки данных в других сервисах. Поскольку у нас есть достаточно веские основания полагать, что временные метки находятся в определённом диапазоне, и у нас есть математическая уверенность в количестве энергии, необходимой для переписывания истории блокчейна, Биткойн предоставляет надёжную основу для проставления временных меток данным. Но насколько надёжную?
Гибкость временных меток Биткойна
Чтобы временная метка в заголовке блока считалась действительной для узлов сети, она должна соответствовать двум критериям:
- быть не более чем на 2 часа в будущем относительно скорректированного времени вашего узла (функция от часов вашего локального устройства и времени ваших пиров);
- быть больше медианного значения временных меток предыдущих 11 блоков.
Первое правило имеет смысл — очевидно, мы не хотим, чтобы кто-то заявлял, будто он пришёл к нам из будущего, и узлам очень легко отвергать такие заявления, поскольку мы все в целом согласны с тем, какое сейчас время. Существует множество способов проверки текущего времени, хотя очень популярным средством синхронизации часов компьютеров является Network Time Protocol.
Однако обеспечить, чтобы время не было слишком далеко в прошлом от разумной точки отсчёта, сложнее. Это связано с тем, что мы не можем предполагать, что узел проверяет блок в момент, близкий к его первоначальному созданию. Узлы должны иметь возможность покидать сеть и возвращаться в неё по любой причине или без вовсе причины. Если бы блоки должны были быть созданы в пределах нескольких часов от текущего времени, то узел, слишком сильно отставший от вершины цепочки, стал бы отвергать исторические блоки.
«Узлы могут покидать сеть и вновь подключаться, принимая самую длинную цепочку блоков как подтверждение пропущенной истории транзакций». (Сатоши Накамото, уайтпейпер Биткойна)
Это может показаться контринтуитивным, но в Биткойне нет правила, согласно которому временная метка блока обязательно должна быть позже временной метки предыдущего блока. Если задуматься, такое правило могло бы вызвать проблемы — если бы майнер создал блок с временной меткой, опережающей текущее время почти на 2 часа, то следующий за ним блок также должен был бы находиться далеко в будущем. Это затруднило бы для других майнеров процесс самокоррекции медианного времени последних 11 блоков.
Также нужно помнить, что хотя блоки должны создаваться примерно каждые 10 минут, реальных гарантий этому нет. Интервалы между блоками могут варьироваться от нескольких миллисекунд до нескольких часов. И хотя ожидается, что медианное время последних 11 блоков должно быть 1 час назад, на практике оно может быть значительно бóльшим или меньшим.
Расширение временного окна
Если мы задумаемся о том, как злоумышленник мог бы попытаться расширить допустимое временное окно, то очевидно, что никакой противник не сможет сдвинуть метки времени более чем на 2 часа в будущее, независимо от имеющейся в его распоряжении вычислительной мощности. Однако атакующий с достаточной вычислительной мощностью мог бы несколько замедлить прогрессию «времени Биткойна», создавая блоки только с метками времени, которые едва проходят проверку, — на одну секунду позже медианного времени предыдущих 11 блоков.
Существуют ли стимулы для подобных действий? В крайнем случае «атака искажения времени» предлагает краткосрочные финансовые выгоды, которые мы ещё обсудим далее. Менее ясно, какие стимулы могут существовать для замедления меток времени на несколько часов то тут, то там. Однако, учитывая, что на основе Биткойна могут строиться другие протоколы (тот же Lightning Network, например), использующие таймлоки, в будущем могут появиться протоколы, которые можно будет эксплойтить путём замедления прогрессии меток времени в Биткойне.
Замедление времени с помощью вычислительной мощности
Поскольку минимальное допустимое время блока основывается на медианном времени предыдущих 11 блоков, злонамеренному майнеру необходимо сгенерировать множество блоков, чтобы вызвать сколько-нибудь заметное замедление медианного времени прошлых блоков (MTP).
Рассмотрим ситуацию, когда все майнеры приблизительно синхронизированы через NTP (протокол сетевого времени), но есть один злонамеренный майнер, который пытается максимально сдвинуть медианное время последних 11 блоков.
Одно вполне очевидно: Сатоши принял мудрое решение использовать медианное значение временных меток последних 11 блоков, а не среднее, поскольку среднее значение легче поддаётся манипуляциям. Другой способ представить «медианное прошлое время» — это, по сути, временная метка 6-го блока назад, если все метки расположены по порядку. Если они не упорядочены, алгоритм просто переставляет их. Таким образом, чтобы сколько-нибудь значимо повлиять на это значение, необходимо решить 6 из последних 11 блоков. Для поддержания такой атаки потребуется 55% вычислительной мощности, при которой нарушается одно из основных предположений термодинамической безопасности Биткойна. Однако и майнер с меньшей вычислительной мощностью может этого достичь по случайности, при определённом везении.
Насколько сложно найти 6 блоков из 11? В целом, вероятность того, что конкретный майнер решит следующий блок, примерно равна его доле в общем хешрейте сети. Таким образом, если у вас только 1% хешрейта (что всё ещё довольно много), то ваш шанс создать 6 из любых 11 последовательных блоков равен (0,01⁶ • 0,99⁵) • (11! / (5! • 6!)) = примерно один к 2 миллиардам. Для майнера, контролирующего 1% хешрейта, ожидаемое количество блоков, которое должно пройти, прежде чем он найдёт 6 из 11 последовательных блоков, эквивалентно более чем 43 000 лет.
Более обобщённая формула для ожидаемого времени успешной атаки с замедлением времени выглядит так:
(1 / (462 • (% хешрейта⁶ • (1 — % хешрейта)⁵))) / 144 блока/день = кол-во дней
Как видите, для проведения такой атаки в сколько-нибудь значимых временных рамках злоумышленникам потребуется майнинговый пул приличного размера, обладающий как минимум 10% от общего хешрейта сети.
Максимальное замедление
Однако, чтобы вызвать максимальное замедление медианного времени прошлых блоков (MTP), майнер стремился бы решить 6 блоков подряд. Если его 6 из последних 11 блоков не идут строго по порядку, то временные промежутки, созданные другими майнерами, вынудят недобросовестного майнера устанавливать временные метки своих блоков с интервалом более одной секунды. Это происходит потому, что MTP для каждого блока будет значительно продвигаться вперёд, так как честные майнеры устанавливают для своих блоков более точные временные метки.
Насколько сложно решить 6 блоков подряд? Опять же, для майнера с 1% от общего хешрейта сети вероятность найти 6 блоков подряд составляет 0,01⁶, что примерно равно одному шансу на триллион. При этом ожидаемое количество блоков, которое должно быть создано, прежде чем найти 6 подряд, составляет почти 2 миллиона лет.
Более обобщённая версия формулы для ожидаемого времени успешной атаки с замедлением времени будет выглядеть так:
(1 / % хешрейта⁶) / 144 блока/день = кол-во дней
Такая атака ещё сложнее в исполнении и требует около 20 или 30 % хешрейта сети, чтобы состояться в разумные сроки. Как вы можете себе представить, подобное случается крайне редко, и когда случается, незамеченным не проходит. Последний такой случай произошёл в июле 2014 года с GHash, который на некоторое время обладал более чем 40% хешрейта и даже ненадолго достиг 51%. Это также случалось за 9 месяцев до того, когда BTC Guild имел почти половину хешрейта. Если вы контролируете 50% хешрейта, то ваш шанс создать 6 блоков подряд равен 0.5⁶, или 1/64, а ожидать нахождения 6 блоков подряд можно было бы примерно каждые 12 часов.
Очевидно, что невозможно долгосрочно замедлять медианное время прошлых блоков Биткойна, не контролируя большую часть вычислительных мощностей сети. Однако на короткий период (примерно в течение одного блока) можно его замедлить на несколько часов — при удачном стечении обстоятельств и должном терпении. Если предположить, что другие майнеры достаточно точны в установке временных меток, то медианное время прошлых блоков должно быть равно примерно 1 часу, хотя из-за нерегулярности нахождения блоков оно может составлять и на несколько часов больше. Если удастся создать 6 блоков с временными метками на 1 час назад плюс 1 секунду, 2 секунды, 3 секунды и так далее, то на 6-м блоке медианное время прошлых блоков будет составлять около 2 часов. В экстремальном случае, если предположить часовые интервалы между блоками, медианное время может отставать на 6 часов.
Допустив разумную гибкость в отношении временных меток блоков и используя вместе с тем медианное время недавних блоков, мы получаем алгоритм, который довольно сложно обмануть, но при этом не настолько хрупкий, чтобы негативно отразиться на майнерах, чьи часы несколько рассинхронизированы с реальным временем.
Просчитаем потенциал для атаки замедлением времени
Что, если бы в распоряжении злоумышленника действительно было более 50% вычислительной мощности сети и он хотел бы замедлить движение времени в Биткойне? Что ж, он мог бы доставить довольно много неприятностей. Такой враждебный майнер мог бы препятствовать продвижению временной метки более чем на 1 секунду с каждым новым блоком. Если делать это достаточно долго, в итоге создавая блоки на интервалах пересчёта сложности с временными метками, которые бы показывали, что на создание предыдущих 2016 блоков ушло гораздо больше времени, чем 2 недели, то он мог бы обмануть логику пересчёта сложности, каждые 2016 блоков уменьшая сложность майнинга до 75%. В конце концов, при достаточно низкой сложности, он мог бы создавать столько блоков за определённый период времени, сколько захочет, и таким образом получать больше вознаграждения за майнинг, чем ожидалось. Оптимизированная атака искажением времени могла бы добыть все оставшиеся биткойны за 18,7 дней. На самом деле мы наблюдали подобное поведение в testnet3 Биткойна из-за особенности пересчёта сложности, и теперь в этой тестовой сети создано 1 482 878 блоков за 8 лет, на ~350% превышая ожидаемую эмиссию.
Атаки искажением времени не являются чем-то новым. Впервые такая атака была проведена в 2011 против койна под названием Geist Geld, и на форуме BitcoinTalk её обсуждали как «вариант атаки 51%». Geist Geld был создан для проверки верхних пределов скорости генерации блоков путём использования очень коротких интервалов между блоками, а также для изучения поведения криптовалюты с (почти) стабильной скоростью генерации и без верхнего предела или изменений в предложении.
Whitecoin, похоже, тоже пострадал от атаки искажения времени в 2014 году.
В 2018 году подобной атаке подвергся Verge. А 6 недель спустя он был атакован снова!
В целом, криптовалюты, обладающие меньшей частью вычислительной мощности для определённого типа оборудования (ASIC или GPU), уязвимы к атакам искажения времени, поскольку изначально подвержены атакам 51%.
Интересно, что, хотя искажение времени часто считают атакой, поскольку оно приводит к непредусмотренному поведению системы, люди показали также, что его можно использовать и для потенциально желаемых целей. В 2015 году Виталик Бутерин описал способ ускорения блоков посредством софт-форка с сопутствующим ему увеличением пропускной способности сети. В 2018 биткойн-разработчик Марк Фриденбах выдвинул предложение по использованию этого непредусмотренного поведения для добавления новой функциональности в Биткойн. В своём предложении «Forward Blocks» Марк утверждал, что его метод позволяет увеличить объём транзакций в сети в 3584 раза, изменить алгоритм proof-of-work обратно совместимым образом, реализовать шардинг, создать рынок возмещаемых комиссий для определения консенсусных комиссий, а также сгладить сокращение субсидии на блок наряду с реализацией необходимых элементов протокола для Confidential Transactions, MimbleWimble, несвязываемых анонимных трат и сайдчейнов.
Однако такие предложения являются спорными и, вероятно, вынудили бы всех, кто создаёт системы, зависящие от временных меток в заголовках блоков Биткойна, искать эти данные в других источниках. Кроме того, как отметил Грег Максвелл в рассылке разработчиков Биткойна, такое изменение было бы довольно легко блокировать:
«Это можно решить с помощью софт-форка, который наложит дополнительные ограничения на временные метки блоков. В этом направлении уже было выдвинуто несколько предложений». (Грег Максвелл)
В заключение
Система защиты временных меток Биткойна и простые правила, ограничивающие диапазон допустимых временных меток, выдержали 10 лет в условиях враждебной среды, несмотря на известные слабости. Мы знаем, что группа майнеров с 51% мощности могла бы нанести серьёзный ущерб сети, по крайней мере на короткое время, но этого никогда не происходило — вероятно, ввиду отсутствия у майнеров каких-либо стимулов для таких действий. Рациональные майнеры не выберут краткосрочную выгоду в обмен на уничтожение долгосрочного источника стабильного дохода.
Как блокчейн-системы усиливают личный суверенитет? Криптография позволяет пользователям создавать асимметричный щит для самозащиты. Иными словами, стоимость атаки на пользователя, защищающего свои данные с помощью криптографии, на порядки выше, чем затраты самого пользователя на эту защиту.
Аналогично, запуская программу, проверяющую, что никто не нарушает правила системы, мы достигаем определённого уровня суверенитета, поскольку нам не нужно слепо доверять честности других участников. Джеймсон Лопп подробно объяснял, как органически формируется консенсус в публичных permissionless (без ограничений доступа) сетях, в этом фрагменте своей презентации:
Консенсус в этих сетях достигается тем, что каждый из нас соблюдает правила, с которыми мы согласны, и таким образом решает, какие данные принимать и распространять среди других участников, а какие отвергать. Когда участники не согласны с правилами и не могут договориться о том, какие данные принимать, сеть автоматически разделяется. В результате «общество», с которым может взаимодействовать участник, также разделяется, и «управление» сетью в целом происходит совершенно бесшовно.
По моему мнению, самая справедливая система – та, в которой любой участник может наложить вето на что угодно. Это даёт нам возможность создать систему, в которой мы не стремимся к тому, что лучше для большинства (цель демократий). Вместо этого, такая архитектура создаёт систему, в которой мы стремимся к тому, что наименее вредно для всей пользовательской базы.
Традиционное управление
Давайте подумаем, как человеческая цивилизация пришла к тому, что мы имеем сейчас. За последние несколько тысячелетий мы создали иерархические системы командования и контроля, чтобы помочь нам организоваться и специализироваться. Благодаря этому нам больше не нужно беспокоиться о выращивании собственной еды и обо всём процессе самообеспечения.
Вместо этого, вы можете делегировать эти конкретные функции другим людям, которые специализируются в них и, вероятно, работают в компаниях и других иерархических структурах, чтобы быть очень, очень эффективными и продуктивными в выполнении одной-двух задач.
В результате мы получаем систему, где происходит значительная концентрация власти на верхних уровнях, и эта власть в основном используется для координации других слоёв людей, которые фактически выполняют работу во всей организации. Утверждение справедливо для организаций как государственного, так и частного сектора.
Это довольно эффективно, но, конечно, не обходится без компромиссов. И у меня нет впечатления, что мы как общество действительно всерьёз задумывались об этих компромиссах. Выигрывая в эффективности и удобстве, мы теряем в устойчивости.
Социальная масштабируемость
Вы, должно быть, слышите много речей о технических решениях масштабирования и о проблемах с производительностью, которые возникают с блокчейнами, — потому что блокчейны представляют собой, наверное, наименее эффективную и наименее производительную структуру базы данных из когда-либо созданных.
Но я думаю, что многие упускают из виду проблему социальной масштабируемости. Так что же такое социальная масштабируемость?
«Цивилизация развивается путём увеличения числа важных операций, которые мы можем выполнять, не задумываясь о них».(Альфред Уайтхед, английский математик и философ)
Если вспомнить о бюрократии и о том, как развивалась цивилизация с её иерархиями командования и контроля, то главный вопрос заключается в поиске баланса между эффективностью и системным риском, который мы создаём, централизуя власть в руках немногих.
Поэтому я считаю, что блокчейн-сети, основанные на консенсусе, могут позволить нам создавать системы, которые масштабируются социально. Это означает, что затраты на участие в сети и пребывание в ней становятся гораздо ниже.
О затратах я говорю не с технической, но скорее с когнитивной точки зрения. Если вы знакомы с понятием числа Данбара, оно отражает тот факт, что человеческий мозг способен поддерживать лишь около 100-150 активных отношений одновременно, прежде чем мы столкнёмся со своего рода когнитивной перегрузкой.
Находясь в системе, устроенной таким образом, что другие участники обладают достаточной властью, чтобы выбить почву из-под ваших ног, изменить правила и даже саму систему, вам приходится тратить много времени на беспокойство обо всех этих других участниках и о том, как они могут посягнуть на ваш суверенитет.
Но если мы сможем создать надёжные платформы, где власть настолько децентрализована, что это позволит сформировать гораздо более устойчивую и заслуживающую доверия систему, то люди смогут взаимодействовать друг с другом и использовать эту систему с минимальными когнитивными затратами. С помощью публичных сетей без ограничений доступа мы можем создать по-настоящему свободные рынки, которые будут масштабируемы в социальном плане. Мы сможем этого достичь, создав систему, в которой не нужно беспокоиться обо всей динамике власти и связанных с этим закулисных играх.
И по сути мы делаем это путём инвертирования и автоматизации бюрократии для создания новых форм киберобщества.
«Если мы можем обеспечить безопасность наиболее важной функциональности финансовой сети при помощи компьютерных наук, вместо традиционных бухгалтеров, регуляторов, следователей, полиции и юристов, то мы двигаемся от локальной системы с ручным управлением и непоследовательной безопасностью к автоматизированной, глобальной и намного лучше защищённой.» (Ник Сабо, «Деньги, блокчейны и социальная масштабируемость»)
Права собственности
В определённом смысле имущественные права в криптографически защищённых протоколах определены чрезвычайно чётко. Либо вы можете предоставить сети достаточное доказательство того, что вы владеете записью в распределённом реестре и можете ею манипулировать, либо нет.
Однако на более высоком уровне здесь действует теория игр. Вы можете быть защищены от кражи или заморозки ваших активов каким-либо из органов власти, но всегда существует вероятность того, что экосистема в целом обернётся против вас. Благодаря теории игр и инвертированной природе управления в публичных сетях без ограничений доступа, такой сценарий становится крайне маловероятным ввиду сложности координации подобных изменений, но он никогда не является невозможным.
Возьмём, к примеру, реакцию Ethereum на «взлом» DAO. Это самый известный пример реакции на воспринимаемую масштабную угрозу, но далеко не единственный случай изменения протокола в ответ на действия злоумышленников.
В случае хищения средств из Ethereum DAO из-под контроля достаточного числа участников сети была выведена достаточно значительная сумма, так что стимулы для координации изменения протокола с целью возврата средств их первоначальным владельцам оказались достаточно сильными. Злоумышленнику, атаковавшему DAO, удалось получить контроль над 3,6 миллионами ETH, что составляло около 5% от общего предложения ETH на тот момент. Конечно, логический аргумент состоит в том, что, поскольку «хакер» DAO не нарушал правил протокола, он получил законное право собственности на эти токены, но развитие ситуации показывает, что не все правила прописаны.
Стоит заметить, что нечто подобное случалось и с Биткойном, хотя в то время его экосистема была гораздо меньше. 15 августа 2010 года было обнаружено, что блок 74 638 содержал транзакцию, создавшую 184.467.440.737,09551616 BTC, распределённых между тремя различными адресами. Это стало возможным из-за того, что код, используемый для проверки транзакций, не учитывал случай, когда значения выходов были настолько велики, что при их суммировании происходило переполнение.
Через пять часов после обнаружения проблемы была опубликована новая версия клиента. Она содержала изменение в правилах консенсуса в виде софт-форка, отвергающего транзакции с переполнением выходного значения. Произошло разветвление блокчейна. Несмотря на то что многие узлы, не установившие обновление, продолжали строить «плохую» ветку, «хорошая» ветка обогнала её на высоте блока 74 691, после чего все узлы приняли «хорошую» ветку как авторитетный источник истории транзакций Биткойна.
С одной стороны, сеть в целом отобрала биткойны у того, кто воспользовался существовавшей уязвимостью. С другой стороны, если бы внесённое исправление затрагивало только будущие блоки, злоумышленник в итоге завладел бы 99,9886159% всех когда-либо созданных биткойнов. Так что мотивация была вполне очевидна.
Спок: Это логично. Потребности большинства перевешивают…
Кирк: Потребности меньшинства.
Спок: Или одного.
(Звездный путь II: Гнев Хана)
Социальные контракты
Есть парадокс в том, что общественный договор невозможно написать, поскольку нет власти, способной его обеспечить. Я бы сказал, что правовые системы, созданные правительствами, являются попыткой кодификации общественного договора.
«Каждый несет на своих плечах часть общества; никто не может сбросить свою долю ответственности на других. И никто не найдет спасения для себя лично, если общество как целое устремляется к закату. Потому каждый в собственных интересах должен отважно бросить все свои силы в битву душ. Никто не может безучастно остаться в стороне; усилия каждого сказываются на общем выборе. Каждый человек, хочет он того или нет, участвует в грандиозной исторической схватке, в решительном сражении, которое нам навязала наша эпоха».
(Людвиг фон Мизес, «Социализм: экономический и социологический анализ», PDF)
Мне кажется, что «социальный контракт», или «общественный договор», — это просто эвфемизм для «наименьшего общего знаменателя убеждений людей в рамках определённой организации». Он эфемерен, трудно поддаётся определению и подвержен изменениям. Несмотря на все наши успехи в развитии машинного консенсуса для автоматизации соблюдения правил в сообществе, похоже, мы всегда будем ограничены запутанной и неподдающейся количественной оценке природой человеческого консенсуса.
Общество добровольного участия и общество добровольного выхода
Замечательная особенность создания публичных сетей без ограничений доступа, защищённых криптографией, заключается в том, что те, кто решает в них участвовать, делают это исходя из собственных интересов. Каждый, кто пользуется Биткойном сегодня, делает это потому, что добровольно принял эту систему правил. Хотя в будущем ситуация может измениться, если больше государств решат принять его в качестве законного платёжного средства.
Сравните это с чем-то вроде Free State Project (Проект «Свободный штат»), который, по сути, «вторгается» в существующее общество (Нью-Гэмпшир) и пытается подорвать его изнутри. Такой путь, несомненно, будет более сложным: придётся бороться с действующей системой вместо того, чтобы «осваивать» нетронутую территорию.
Общественный договор Биткойна
Что представляет собой общественный договор Биткойна? Я в этом отношении обычно ссылаюсь на набор его ключевых «неприкосновенных свойств», которые в целом де-факто признаются всеми пользователями.
Существует множество негласных правил, касающихся предложения изменений в протоколе Биткойна. Некоторые из них носят философский характер, некоторые — технический, а некоторые представляют собой сочетание обоих аспектов.
Консенсус, а не командно-административное управление
Управление основывается на киберпанковском принципе приблизительного консенсуса и работающего кода.
В Биткойне нет центрального органа власти. Даже принципы, изложенные в этой статье, ни в коем случае не являются непререкаемыми. Это только наблюдения, сделанные мной и другими участниками экосистемы.
- Биткойн — это система, которая автоматизирует непрерывный процесс достижения консенсуса между её участниками. Это машинный консенсус, который обеспечивает соблюдение человеческого консенсуса.
- Нарушения консенсуса могут разрушить всю систему, вызвав потерю доверия к её надёжности.
- Код, отвечающий за консенсус, должен быть изолирован и редко подвергаться каким-либо изменениям.
- Изменения протокола не должны навязываться пользователям без их согласия. То есть, пользователи должны в первую очередь свободно принимать изменения, а не только иметь свободу отказаться от них.
- Следовательно, программные клиенты не должны обновляться автоматически, так как это лишило бы пользователей власти, передав её в руки разработчиков.
- Ввиду распределённой природы сети не следует предполагать, будто каждый пользователь внимательно следит за изменениями протокола.
Как мы вносим изменения в систему? Чтобы изменить код консенсуса, мы должны каким-то образом достичь человеческого консенсуса для изменения правил системы. Процесс обработки предложений по улучшению Биткойна (Bitcoin Improvement Proposals) описан здесь. Он не идеален, но достижение консенсуса — всегда сложный и неоднозначный процесс.
Как исторически вносились изменения?
- По указанию Сатоши
- Путём «голосования» майнеров ончейн (BIP-16)
- Обновление в назначенный день (BIP-30)
- Механизм IsSuperMajority (переключение по двойному порогу) (BIP-34, BIP-65, BIP-66)
- Биты версии (BIP-9)
Кто имеет право принимать или отвергать предложенные изменения? На уровне разработчиков цель состоит в достижении «грубого консенсуса». Это не подразумевает 100% согласия, но требует доработки любого предложения до такой степени, чтобы не оставалось разумных возражений против его реализации.
Как мы измеряем поддержку изменений в системе? Разработчики обсуждают их между собой и с другими участниками экосистемы, на которых может повлиять то или иное предложение. Любой, кто следит за текущими усилиями по развитию, может внести свой вклад через обсуждения в списках рассылки, репозиториях кода, социальных сетях и т.д.
В конечном счёте управление протоколом не происходит чётко определённым, иерархическим образом. Напротив, оно «переворачивает» традиционные модели управления, реализуя контроль «снизу вверх».
Минимизация доверия
Доверие делает системы хрупкими, непрозрачными и дорогими в эксплуатации. Сбои в доверии приводят к системным коллапсам, курирование доверия создаёт неравенство и монопольную зависимость, а естественно возникающие узкие места доверия могут быть использованы для отказа в доступе к надлежащей правовой процедуре.
«Биткойн — это система одноранговых (P2P) электронных наличных, которые ценны по сравнению с традиционными системами благодаря денежной автономии, которую она предоставляет своим пользователям через децентрализацию. Биткойн стремится решить фундаментальную проблему обычных валют: тот объём доверия, который необходим для их функционирования. Не то чтобы обоснованное доверие было плохо само по себе, но оно делает системы хрупкими, непрозрачными и дорогими в использовании. Сбои доверия приводят к системным коллапсам, поддержание доверия создаёт неравенство и монопольную зависимость, а естественным образом возникающие узкие места в доверии могут быть использованы для отказа в доступе к надлежащей правовой процедуре.
Благодаря использованию криптографических доказательств и децентрализованных сетей, Биткойн минимизирует и замещает эти издержки доверия. При существующих технологиях возникают фундаментальные компромиссы между масштабом и уровнем децентрализации. Если система слишком дорогостоящая, люди будут вынуждены доверять третьим сторонам, вместо того чтобы самостоятельно обеспечивать соблюдение правил системы. Если использование ресурсов блокчейном Биткойна, относительно доступных технологий, будет слишком велико, то Биткойн будет терять свои конкурентные преимущества по сравнению с традиционными системами, поскольку валидация станет слишком дорогой (и потому недоступной для многих пользователей), что вновь вынудит полагаться на доверие в системе. Если пропускная способность слишком низкая, а наши методы совершения транзакций неэффективны, то доступ к блокчейну для разрешения споров будет слишком дорогим, опять же, возвращая необходимость доверия в систему». (Грегори Максвелл)
Биткойн-разработчик Мэтт Коралло тоже писал о важности этого свойства:
«Из многочисленных свойств Биткойна, независимость от доверия, или возможность использовать Биткойн, доверяя только открытому программному обеспечению, которое вы запускаете, безусловно, является ключевым. Интерес к Биткойну, похоже, почти исключительно проистекает из желания избежать необходимости доверять какой-либо третьей стороне или комбинации таких посредников. Это вряд ли должно быть новостью для кого-либо, но понимание того, почему эта доверительная независимость так важна (и какие формы принимает), имеет решающее значение для разработки и совершенствования технологии Биткойна».
Требование минимизации доверия является фундаментальным свойством, которое обеспечивает реализацию многих других принципов, составляющих общественный договор Биткойна. Эти принципы можно понимать как исходящие из цели снизить уровень доверия и работающие на достижение этой цели. Мы никогда не сможем достичь 100% независимости от доверия, поскольку ни у кого нет ресурсов для проверки всего программного и аппаратного обеспечения, используемого для взаимодействия с сетью. Тем не менее мы можем приблизиться к этому настолько, чтобы быть уверенными, что прозрачные группы участников с согласованными стимулами не станут вступать в сговор в ущерб остальной части экосистемы.
Децентрализация
Децентрализация множества атрибутов, но наибольшее значение имеет энергия.
Открытая система, такая как Биткойн, не сохранит желаемых свойств, описываемых в этой части поста, если станет централизованной настолько, так что отдельные аспекты сети смогут контролироваться отдельными лицами или картелями. Децентрализация — это средство, а не цель. Распределяя власть как можно шире, мы минимизируем необходимость доверия к какому-либо отдельному субъекту, поскольку знаем, что ни один отдельный субъект не сможет вмешаться в наше использование системы.
«Многие люди автоматически отвергают электронные валюты как безнадёжное дело из-за всех компаний, потерпевших в этом неудачу с 1990-х годов. Надеюсь, очевидно, что именно централизованный контроль над этими системами и обрёк их на провал. Я думаю, это первая попытка создать децентрализованную систему, не основанную на доверии». (Сатоши Накамото)
Существует множество потенциальных аспектов централизации, которые зачастую с трудом поддаются количественной оценке:
- биржи;
- разработчики;
- программные клиенты;
- майнинговые пулы;
- оборудование для майнинга;
- экономически активные узлы;
- общее распределение владения ценностью;
- процент пользователей, самостоятельно контролирующих свои секретные ключи;
- процент пользователей, проверяющих реестр с помощью собственного узла.
Высокая централизация по любому отдельно взятому показателю не обязательно фатальна для системы, но важно помнить, что система прочна лишь настолько, насколько прочно её самое слабое звено. Поэтому при внесении любых изменений в систему необходимо тщательно следить за тем, чтобы не допустить консолидации власти по какому-либо из возможных направлений.
Читайте также: (Де)централизация Биткойна
Устойчивость к цензуре
Никто не должен обладать властью, позволяющей препятствовать взаимодействию других людей с сетью Биткойна. Также как никто не должен иметь возможность бесконечно блокировать подтверждение валидной транзакции. Хотя майнеры по своему свободному выбору могут не подтверждать ту или иную транзакцию, любая действительная транзакция с конкурентоспособной комиссией в конечном счёте должна быть подтверждена экономически рациональным майнером.
Псевдонимность
Для владения или пользования биткойном не должна требоваться идентификация личности. Этот принцип усиливает устойчивость системы к цензуре и её взаимозаменяемость, поскольку сложнее выбрать транзакции, которые можно считать «запятнанными», когда сама система не отслеживает пользователей.
Открытый исходный код
Исходный код программного клиента для Биткойна всегда должен быть открыт для чтения, изменения, копирования и распространения любым желающим. Ценность Биткойна основана на прозрачности и возможности аудита системы. Возможность проверить любой аспект системы гарантирует, что нам не нужно доверять каким-либо конкретным субъектам сети в отношении их честности.
Открытое сотрудничество
Хотя каждый волен в частном порядке проводить исследования и разработки, любые попытки внести изменения в протокол, особенно несовместимые с предыдущими версиями ПО, должны происходить открыто, а не за закрытыми дверями. Биткойн принадлежит человечеству, поэтому важно, чтобы предлагаемые изменения были доступны для публичного обсуждения. Рекомендуемым способом предложения изменений является процесс Bitcoin Improvement Proposal (BIP), хотя это не является обязательным требованием, поскольку система не предусматривает авторитарного органа, который бы обеспечивал соблюдение этого процесса.
Проблема добровольной организации и возникающей в результате этого динамики власти может привести к восприятию определённых людей или групп как авторитетов, но это иллюзия.
Открытый доступ
Никакие произвольные «привратники» не должны иметь возможности воспрепятствовать чьему бы то ни было участию в сети (в качестве отправителя транзакций, узла, майнера и т.д.). Это является результатом минимизации доверия, устойчивости к цензуре и псевдонимности.
Нейтральность политическая и правовая
Биткойн должен быть безразличен к законам национальных государств, как и другие интернет-протоколы. Регуляторы могут выяснять, как им реагировать на функциональность, обеспечиваемую технологиями на основе Биткойна, а не наоборот.
Взаимозаменяемость
Это важное свойство надёжных денег. Если бы каждому пользователю приходилось проводить анализ происхождения всех получаемых средств, это значительно снизило бы полезность системы.
Все UTXO должны быть одинаково пригодны для траты. К сожалению, в настоящее время это не так, и существуют сервисы, которые отслеживают «запятнанные» UTXO, связанные с преступной деятельностью. Побочным эффектом этого является то, что невиновные пользователи могут попасть под ограничения из-за использования UTXO, отделенных всего несколькими переводами от «запятнанного».
Взаимозаменяемость требует приватности; приватность возникает при наличии большой группы пользователей (анонимного множества), среди которых невозможно достоверно установить участников конкретной транзакции. К сожалению, существует много известных угроз приватности пользователей Биткойна, в результате Биткойн в его нынешнем состоянии далёк от идеальной взаимозаменяемости.
Читайте также: Конфиденциальность и no-KYC
Прямая совместимость
Текущая версия ПО должна корректно обрабатывать данные и работать с компонентами будущих версий.
Биткойн поддерживает подписание транзакций без их трансляции в сеть; существует принцип, согласно которому любые подписанные, но не транслированные транзакции должны оставаться действительными и пригодными для трансляции.
Хороший пример — транзакции с nLocktime, которые не могут быть подтверждены до наступления указанного времени; это можно использовать для передачи BTC по наследству или иных отложенных во времени задач. Изменение этого правила может иметь опасные последствия, сделав недействительными неизвестное количество нетранслированных транзакций.
То, что Биткойн придерживается этого принципа, даёт пользователям уверенность в протоколе: любой может обезопасить свои средства любым способом, который он придумает и реализует, не нуждаясь в чьём-либо разрешении. До тех пор, пока он следует правилам протокола, в худшем случае узлы могут по умолчанию прекратить ретрансляцию определённых транзакций.
Минимизация требуемых ресурсов
Для поддержания низких затрат на верификацию истории блокчейна, пространство блока ограничено. Поэтому использовать большой объём пространства блока должно быть дорого для любого участника.
Валидация должна оставаться дешёвой, поскольку это способствует минимизации доверия, если большее число пользователей может позволить себе проверять систему. Кроме того, дешёвая валидация значительно удорожает атаки на истощение ресурсов.
В Биткойне предусмотрен механизм для быстрого отклонения за недорого созданных недействительных блоков. Это фундаментальный принцип цифровых наличных — сделать спам сети запретительно дорогим. Загрузив сперва 80-байтовый заголовок блока, узел может получить доказательство работы и выполнить быструю и корректную проверку ещё до синхронизации транзакций в нём.
Нам следует также уделять особое внимание эффективному использованию пространства блока, сохраняя лишь минимально необходимые данные для проверки сложных операций, вместо того чтобы хранить и выполнять эти операции непосредственно в блокчейне.
Конвергенция
Любые два клиента Биткойна, если они подключаются к одному честному узлу, в конечном счёте должны сойтись на вершине одной и той же цепочки блоков.
Например, в форке Bitcoin ABC этот принцип был нарушен введением ограничения на реорганизацию цепочки максимум в 10 блоков. В результате, если бы произошло разделение сети и такая страна, как Китай, оказалась бы отрезанной от остального интернета, майнеры там продолжили бы добывать блоки в отдельной цепочке, и после восстановления соединения две ветки не смогли бы сойтись в одну цепь с наибольшим совокупным доказательством работы.
Все операции с транзакциями должны быть детерминированными. При одинаковом состоянии системы транзакция должна выполняться только одним способом; внешние по отношению к системе факторы не должны влиять на её вычисления. Аналогично, не должно быть скриптов, которые выполняются по-разному на двух разных машинах. Единственное решение этой проблемы — изоляция: смарт-контракты и транзакции должны быть независимы от недетерминированных элементов.
Изменения протокола не должны создавать потенциал для признания транзакций недействительными в результате реорганизации блокчейна. Операции с транзакциями должны быть не только детерминистическими, но и не зависящими от состояния.
Неизменность транзакций
Каждый дополнительный блок, добавленный в цепочку после данного блока, должен значительно снижать вероятность того, что данный блок будет отброшен в результате реорганизации. Хотя технически гарантировать абсолютную неизменность невозможно, мы можем гарантировать, что с экономической точки зрения отмена транзакции становится практически невозможной после того, как она будет погребена под достаточным объёмом «доказательства работы».
Консерватизм
Деньги должны быть стабильными в долгосрочной перспективе. Мы должны проявлять консерватизм в отношении внесения изменений, как чтобы минимизировать риски для системы, так и для того, чтобы люди могли продолжать использовать систему так, как считают нужным.
Что на самом деле представляет собой консерватизм? Это способ обеспечения социальной масштабируемости.
«Успех Биткойна заключается в том, что ценой активного потребления ресурсов и низкой вычислительной производительности приобретается нечто ещё более ценное: социальная масштабируемость». (Ник Сабо)
Проблема, присущая многим системам, управляемым людьми, заключается в том, что правила системы могут применяться произвольно или подвергаться изменениям по чьей-либо прихоти. Это приводит к тому, что системы становятся менее надёжными.
«Если мы можем обеспечить безопасность наиболее важной функциональности финансовой сети при помощи компьютерных наук, вместо традиционных бухгалтеров, регуляторов, следователей, полиции и юристов, то мы двигаемся от локальной системы с ручным управлением и непоследовательной безопасностью к автоматизированной, глобальной и намного лучше защищённой». (Ник Сабо)
Читайте также: Где определено и как обеспечивается ограничение эмиссии в 21 миллион биткойнов?
Суверенитет внутри системы, а не против неё
Системы вроде Биткойна превосходят другие благодаря более прозрачным стимулам и управлению, несмотря на то, что процесс управления и распределение власти в них слабо определены. Кто-то скажет, что это и само по себе «фича, а не баг».
Мы все можем быть суверенными в ограниченной степени, но мы зависим от сотрудничества с другими членами общества для ведения торговли и получения продуктов их труда. Помните, что наши биткойны имеют ценность только потому, что какое-то количество людей по всему миру согласны с нами в том, что они ценны. «Человек — не остров».
Передача консенсуса через поколения
Хотя киберсообщества с добровольным участием, вероятно, лучше традиционного управления национальными государствами или городами-государствами, основанного на угрозе насилия, что, если концепция общества с добровольным участием всё же не выдержит испытания временем на протяжении нескольких поколений?
Один из вопросов, к которому я неоднократно возвращался мыслями на протяжении многих лет, связан с циклами, наблюдаемыми в развитии цивилизации.
«Трудные времена рождают сильных людей. Сильные люди создают лучшие времена. Лучшие времена порождают слабых людей. И слабые люди создают трудные времена». (Г. Майкл Хопф)
Я полагаю, что есть некоторая моральная дилемма в том, что общество может выбрать путь реорганизации и сформировать новую систему правительства и законов. Но эти законы, как правило, существуют бессрочно и навязываются будущим поколениям. Если же общество меняется и решает, что те законы больше не соответствуют желаемому общественному договору, мирно изменить их может быть довольно сложно.
Это происходит потому, что установившиеся порядки обычно крайне устойчивы. Если мы посмотрим на подъём и падение империй, то увидим, что они, как правило, рушатся в результате всё большего навязывания бюрократии обществу, пока либо население не восстаёт, либо система не разрушается сама по себе из-за истощения ресурсов и неспособности реагировать на меняющиеся условия. Я часто задумывался, не было бы справедливее, если бы по умолчанию законы нуждались в повторном утверждении каждым новым поколением или каждые несколько десятилетий.
Куда мы движемся?
Я думаю, что после рассмотрения всех этих вопросов остаётся открытым следующий: как направлять эволюцию общественного договора? На мой взгляд, это вопрос культуры, нарративов и меметики.
«Моё предсказание состоит в том, что либертарианцы отвернутся от Биткойна. Это произойдёт примерно через два года, когда он станет мейнстримом. Я не знаю, как можно получить передовую технологию без участия людей и политиков с радикальными взглядами… Просто нужно пройти через процесс созревания, в результате которого технология выйдет на массовый рынок. В процессе этого радикальная политика отойдёт в сторону». (Марк Андреесен, 2014)
Хотя предсказание Марка не сбылось, в нём была доля истины. Если общество, основанное на добровольном участии, из небольшого и нишевого становится крупным и массовым, вполне возможно, что новички привнесут в него свою культуру и ценности. Это может изменить негласный общественный договор, что, в свою очередь, может привести к попыткам изменить писаные и кодифицированные правила. Поскольку либертарианские идеалы считаются «маргинальными», вполне вероятно, что массовое принятие Биткойна может привести к трансформации общественного договора системы во что-то с более слабыми гарантиями.
Я думаю, что одним из спасительных факторов в Биткойне является то, что самые ранние последователи, придерживающиеся твёрдых идеологических убеждений, владеющие большим количеством биткойнов и имеющие значительное влияние и власть над предприятиями в этой сфере, не так легко поддадутся влиянию. Вопрос о том, как будет развиваться теория игр в этой ситуации, остаётся открытым.
Что вы, дорогой читатель, можете сделать, чтобы способствовать сохранению целостности общественного договора Биткойна и тех свойств, которые мы считаем неприкосновенными?
- Запустите собственную ноду, чтобы самостоятельно обеспечивать соблюдение правил сети.
- Самостоятельно храните свои ключи.
- Просвещайте ваших друзей и родных.
Мы все несём ответственность за то, чтобы система оставалась надёжной, реагировала на новые угрозы и не подвергалась разложению изнутри.
«Бдительность — это не только цена свободы, но и цена успеха любого рода». (Генри Уорд Бичер)
Подписывайтесь на BitNovosti в Telegram!
Делитесь вашим мнением об этой статье в комментариях ниже.
На основе постов Джеймсона Лоппа: 1, 2