Обычно биткойнеры не слишком интересуются тем, что происходит в мире шиткойнов, но в последние месяцы The Merge и переход Ethereum на proof-of-stake стали большой темой и в биткойн-комьюнити. Конечно, непосредственно сети Биткойна это никак не касается, но я думаю, что на это «обновление» всё же стоит обратить внимание. Теперь, когда Ethereum полностью очистился от «неэкологичных» и «расточительных» практик, ассоциируемых с proof-of-work (PoW), можно ожидать, что в войне нарративов перчатки будут сняты, и я думаю, что биткойнерам стоит быть готовыми нанести ответный удар.
Изучение того, как работает PoS, — это действительно хороший способ понять различия между PoW и PoS и компромиссы каждого из них. Хотя я не раз уже встречал высокоуровневые аргументы против PoS — что он подразумевает разные уровни доступа, более централизован и олигархичен, — признаю, что без изучения деталей это всё может выглядеть не очень убедительно. Но углубившись в алгоритм PoS, можно видеть, как все эти свойства естественным образом произрастают из основных его принципов. Так что, если вам интересно, как работает алгоритм PoS и почему он приводит к возникновению таких свойств, читайте дальше!
Содержание:
Решение проблемы двойной траты
Начать предлагаю с краткого обзора проблемы, которую мы пытаемся решить. Предположим, что у нас есть большая группа участников криптовалютной сети, пытающихся поддерживать децентрализованный реестр. Проблема вот в чем: как можно добавить новые транзакции в копию реестра каждого из них так, чтобы все согласились с тем, какие новые транзакции являются «правильными»? PoW решает эту проблему довольно элегантно: транзакции группируются в блоки, при этом создание каждого блока подразумевает большой объем вычислительной работы. Объем требуемой работы может увеличиваться или уменьшаться в зависимости от числа участников и используемого ими оборудования с тем, чтобы блоки производились в среднем каждые десять минут, что дает каждому новому блоку достаточно времени для распространения по сети перед созданием следующего. Любая неоднозначность разрешается путем выбора цепочки с наибольшим количеством проделанной работы, а двойное расходование предотвращается благодаря тому, что требуется не менее 51% хеширующих мощностей сети для того, чтобы блок с двойной тратой смог наверстать основную ветку.
Но предположим, что теперь мы хотим отбросить ключевую идею Сатоши, которая изначально сделала возможной такую распределенную систему. Надоели эти «асики», громкие и раздражающие и жрущие больше энергии, чем частные самолеты Джорджа Сороса, Билла Гейтса и Хиллари Клинтон вместе взятые. Есть ли какой-то способ однозначно договориться о том, какие транзакции следует считать истинными, просто обсудив этот вопрос?
Proof-of-stake в Ethereum решает эту проблему с помощью двух ключевых компонентов. Первый — это выпускать время от времени своего рода «контрольные блоки», цель которых состоит в том, чтобы гарантировать всем в сети «истинность» системы в различные моменты времени. Для создания таких контрольных точек требуется большинство в 2/3 голосов, так что есть некоторая гарантия того, что большинство валидаторов согласились с тем, каким было истинное состояние реестра в тот момент времени. Второй компонент — это наказание пользователей за внесение двусмысленности в сеть — процесс, называемый «слешингом» (slashing). Например, если валидатор создаст форк или проголосует за существующий сайдчейн (аналогично атаке 51%), то будет подвергнут слешингу, то есть лишится внесенного для стейкинга залога, полностью или частично. Валидаторы также могут быть оштрафованы за неактивность, но не так сильно.
Это подводит нас к первому принципу PoS, который заключается в том, что PoS основан на системе отрицательных стимулов (на основе штрафов). Это сильно контрастирует с Биткойном и алгоритмом proof-of-work, которая представляет собой систему положительных стимулов (основанную на вознаграждении). В Биткойне майнеры могут попытаться нарушить правила — некорректно отформатированные блоки, недействительные транзакции и т.п., — но эти блоки будут просто проигнорированы. Худший сценарий — это потраченная впустую энергия. Майнеры также могут свободно образовывать новые ветви от любого из старых блоков, но без 51% хеширующих мощностей сети эти ветки никогда не догонят основную, что, опять же, означает просто пустую трату энергии. Майнеру, который участвует в подобных действиях, намеренно или нет, нет нужды беспокоиться о потере накопленных биткойнов или майнинговых машин. Вместо того чтобы жить в страхе, биткойн-майнеры могут принять решение действовать на свой страх и риск.
Для валидаторов Ethereum мир выглядит совершенно иначе. Вместо того чтобы усердно работать и получать вознаграждение за повышение безопасности сети, валидаторы не выполняют никакой работы, но должны внимательно следить за тем, чтобы их узел не выходил из строя и не отключался от сети, чтобы не потерять свои сбережения, полностью или частично. При внесении каких-либо изменений в сеть, первым побуждением валидатора будет подчиниться тому, что делают остальные — иначе он рискует своими сбережениями. Быть валидатором — значит каждый день ходить по тонкому льду.
Кстати, существование в условиях системы отрицательных стимулов, согласно FAQ Виталика, является одним из, кхм, «преимуществ» proof-of-stake:
Итак, как на самом деле работает слешинг на техническом уровне? Не нужно ли сначала создать список всех валидаторов, чтобы нам вообще было что «слешировать»? Ответ – да. Чтобы стать валидатором в Ethereum, необходимо сначала перевести ETH в залог для «стейкинга» на специальный адрес. Этот список нужен не только для слешинга, но и для голосования, поскольку для формирования контрольных блоков необходимо большинство в 2/3 голосов.
У постоянного хранения списка всех валидаторов есть несколько интересных последствий. Насколько сложно к ним присоединиться? Насколько сложно выйти? Могут ли валидаторы голосовать за статус других валидаторов? И это подводит нас ко второму принципу PoS, который заключается в том, что PoS — это система с уровнями доступа.
Первый шаг в открытии валидатора — это внесение некоторого количества ETH на адрес специального контракта для стейкинга. Сколько ETH? Необходимый минимум составляет 32 ETH, или около $42,5 тыс. на момент подготовки статьи. Для сравнения, стоимость приличной машины для майнинга биткойна обычно исчисляется однозначными тысячами, а домашний майнер может начать и с одного S9 за несколько сотен баксов. Справедливости ради, высокий вступительный взнос в Ethereum имеет техническое обоснование, поскольку более высокий залог для стейкинга сокращает количество валидаторов, что снижает пропускную способность.
Так, получается, плата за депозит высокая, но, по крайней мере, каждый, у кого есть 32 ETH, волен присоединиться или выйти в любой момент, верно? Не совсем. Одновременный вход или выход большого числа валидаторов могут создавать угрозу безопасности. Например, при единовременном выходе большей части сети, они могли бы совершить двойную трату финализированного блока, воспроизведя форк, в котором они никуда не выходили, и при этом не подвергнуться слешингу ни на одной из цепочек. Чтобы снизить этот риск, на входе и выходе установлены ограничения пропускной способности. В настоящее время этот лимит установлен на max(4,|V|/65536) валидаторов в эпоху (т.е. каждые 6,4 минуты), и он одинаков как для входа, так и для выхода. Это примерно соответствует одному полному сету валидаторов каждые десять месяцев. Кстати, несмотря на то, что в настоящее время валидаторы могут опубликовать транзакцию выхода и прекратить валидацию, код для реального вывода заблокированных средств еще даже не написан. Получается как в песенке про «Отель Калифорния»…
И последнее замечание по поводу стимулов для утверждения новых валидаторов. Предположим, что вы акционер крупной и стабильной компании, регулярно выплачивающей дивиденды каждый квартал. Имеет ли смысл раздавать новые акции бесплатно? Конечно, нет, поскольку это привело бы к размыванию дивидендов для всех существующих акционеров. Аналогичная структура стимулов существует в PoS, поскольку каждый новый валидатор размывает доход всех существующих валидаторов. Теоретически валидаторы могут попросту цензурировать каждую транзакцию, которая добавляет новый валидатор, но на практике, я думаю, такой тупой подход маловероятен. Это было бы очень заметно и в одночасье разрушило бы имидж «децентрализации» Ethereum, потенциально обрушив и цену его токена. Я думаю, что вместо этого можно было бы использовать более тонкий подход. Например, правила могут постепенно меняться со временем, что усложнит процесс получения статуса валидатора, оправданиями при этом будут «безопасность» или «эффективность» сети. Любая политика, обогащающая существующих валидаторов за счет новых, будет подразумевать фактор финансовой выгоды, независимо от того, говорится об этом вслух или нет. Здесь мы можем начать понимать, почему PoS имеет тенденцию двигаться к олигархии.
Обзор алгоритма Casper
Теперь, когда мы знаем общую стратегию, лежащую в основе PoS, как на самом деле работает алгоритм? Основные идеи, связанные с контрольными точками и слешингом, были изложены в алгоритме под названием Casper; с него и начнем. Сам Casper фактически ничего не определяет в отношении того, как производить блоки, но скорее определяет общую схему для наложения стратегии контрольных точек и слешинга на уже существующее дерево блокчейна.
Во-первых, некоторая произвольная константа C выбирается в качестве интервала между контрольными точками, который определяет, сколько блоков проходит между контрольными точками. Например, если C=100, то контрольные точки будут возникать в блоках 0, 100, 200 и так далее. Затем все узлы голосуют за то, какой контрольный блок должен быть следующей «утвержденной» (или «обоснованной», если ближе к оригинальному justified) контрольной точкой. Вместо того чтобы голосовать за каждый блок по отдельности, валидаторы фактически голосуют за пары контрольных точек (s,t), которые связывают некоторый обоснованный ранее источник s с некоторой новой целевой контрольной точкой t. Если контрольная точка (s,t) получает большинство в 2/3 голосов валидаторов, то t становится новой обоснованной контрольной точкой. На диаграмме ниже показан пример дерева контрольных точек.
На этой диаграмме функция h(b) обозначает «высоту контрольной точки» — например, высоту блока, кратную 100. Вы могли заметить, что не обязательно каждый 100-й блок будет утвержден в качестве контрольного: этого может и не произойти, если голосование провалилось на той или иной высоте. Например, предположим, что на высоте 200 две отдельных контрольных точки получили по 50% голосов. Поскольку голосовать дважды является серьезным нарушением, наказываемым слешингом, система «застрянет», если только часть валидаторов добровольно не подставится под слешинг, чтобы добрать до 2/3 голосов. Решением для всех было бы просто «пропустить» контрольную точку 200 и «попробовать еще раз» на блоке 300.
Если контрольная точка утверждена, это не значит, что она финализирована. Для того чтобы контрольная точка считалась финализированной, за ней должна подряд следовать другая утвержденная контрольная точка на следующей возможной высоте. Например, если контрольные точки 0, 200, 400, 500 и 700 были утверждены и связаны между собой, «финализированной» будет считаться только контрольная точка 400, так как только за ней сразу, без промежутка, следует другая утвержденная контрольная точка.
Поскольку терминология очень точная, давайте коротко вспомним три наши оговоренные здесь категории. «Контрольная точка» — это любой блок на добавляемый на высоте C*n, то есть при C=100, каждый блок на высоте 0, 100, 200, 300 и так далее будет контрольной точкой. Даже если на высоте 200 будет создана два блока, они оба будут «контрольными точками». Контрольная точка считается «утвержденной» (justified), если это либо корневой блок на высоте 0, либо 2/3 валидаторов проголосовали за связывание какой-то ранее утвержденной и нынешней контрольной точки. Утвержденная контрольная точка считается «финализированной», если она затем связывается со следующей утвержденной контрольной точкой на следующей возможной высоте. Не каждая контрольная точка непременно утверждается, и не каждая утвержденная контрольная точка становится финализированной, даже в финальной цепочке.
Правила слешинга в протоколе Casper
Правила слешинга в Casper разработаны таким образом, что невозможно, чтобы две финализированные контрольные точки существовали в двух раздельных форках, если только по меньшей мере 1/3 валидаторов не нарушила правила, подставившись под слешинг. Другими словами, только финализированные контрольные точки должны когда-либо рассматриваться как однозначно «истинные» блоки. Возможно даже, чтобы две утвержденные контрольные точки возникали в обеих ветках форка, но только не две финализированные контрольные точки. Также нет никаких гарантий относительно того, когда или где образуется следующая финализированная контрольная точка; в случае разделения блокчейна вы должны сидеть и ждать, пока на одной веток не появится финализированный блок — тогда вы будете знать, что это «правильная» ветка.
В Casper есть два правила слешинга, которые обеспечивают соблюдение этого свойства:
Первое правило запрещает дважды голосовать за контрольные точки с одинаковой целевой высотой, поэтому, если валидатор проголосует за две разных контрольных точки с целевой высотой 200, это наказывается слешингом. Цель этого правила — предотвратить разделение цепи на две разные утвержденные контрольные точки с одинаковой высотой, поскольку для этого потребовалось бы 2/3 + 2/3 = 4/3 от общего числа голосов валидаторов, а значит, по меньшей мере 1/3 валидаторов нарушили правила слешинга. Однако, как мы видели ранее, возможен «пропуск» утвержденных контрольных точек на той или иной высоте блока. Что препятствует разделению блокчейна на двух разных целевых высотах? Например, нельзя ли разветвить контрольную точку 200 на утвержденные контрольные точки на высоте 300 и 400, не подставив никого под слешинг?
Здесь вступает в действие второе правило, которое, по сути, не позволяет валидаторам голосовать по контрольным точкам непоследовательно, как бы «сэндвичем». То есть, если валидатор, например, проголосовал одновременно и за 300→500, и за 200→700, это будет нарушением, которое наказывается слешингом. В случае разделения блокчейна, если в одной ветке образовалась финализированная контрольная точка, то в другой ветке не сможет возникнуть утвержденная контрольная точка на большей высоте, если только не менее 1/3 валидаторов не нарушат правило №2. Чтобы понять почему, предположим, что блокчейн разделился в утвержденные контрольные точки 500→800 и 500→900, затем в какой-то момент в первой ветке была образована финализированная контрольная точка 1700→1800. Поскольку и 1700, и 1800, могут быть утверждены только на форке #1 (при условии, что никто не нарушил первое правило слешинга), единственная возможность для форка #2 образовать утвержденную контрольную точку после 1800 — это если между высотами <1700 и >1800 установлена какая-то связь, подтвержденная голосованием ссылка. Но поскольку такое голосование было бы «сэндвичным» для ссылки 1700→1800 и требовало бы 2/3 голосов, в то время как 2/3 голосов уже собрала 1700→1800, то по меньшей 1/3 валидаторов должны будут нарушить правило №2. В официальном описании Casper есть наглядная схема, описывающая это свойство:
Вот и всё — просто следуйте правилам Casper, и всё будет хорошо!
Выглядит довольно просто, верно? Само собой, я уверен, что PoS будет использовать слешинг только в крайнем случае для поддержания консенсуса, а не как вымогательский механизм давления на валидаторов, чтобы заставить их вести себя определенным образом… Ведь так?
Это подводит нас к третьему принципу PoS: нет никаких правил. «Правила» — это то, что говорят все остальные.
Сегодня ваш узел может технически точно следовать всем заповедям Casper, а завтра ваши сбережения могут быть изъяты — просто потому, что вы делаете что-то, что не нравится остальным. Заапрувили транзакцию «команды в красном» в прошлый раз? Завтра образованное «командой в синем» большинство может подвергнуть ваш депозит слешингу. Или, может быть, наоборот, вы пропустили слишком много сделок «красных»? Тогда завтра образованное «красными» большинство может наказать вас за цензуру. Такие возможности для прямого финансового наказания участников значительно превосходят скромные цензурные полномочия OFAC (Управления по контролю за иностранными активами США). PoS — это как непрерывное мексиканское противостояние, в котором постоянно присутствует неявная угроза слешинга.
Я бы не удивился, если при спорном хардфорке обе стороны жестко закодировали правила валидации другого форка — просто на случай, если они захотят наказать любого, кто присоединится к «неправильной» стороне. Конечно, это было бы «ядерным» вариантом, и, как и в случае с ядерным оружием, каждая сторона может выбрать в качестве возмездия только ответный удар. Я бы предположил, что большинство индивидуальных валидаторов «нейтральны» в том смысле, что они предпочитают финансовое самосохранение политическому самопожертвованию, но могут внешне «принять сторону», если почувствуют, что это правильный шаг, чтобы не попасть под слешинг.
Сколько времени?
Теперь, с пониманием основ о контрольных точках и слешинге, мы можем перейти непосредственно к используемому в Ethereum алгоритму под названием Gasper. Как и заложено в названии, это сочетание Casper, о котором мы уже говорили, и GHOST, стратегии выбора «лучшей» цепочки блоков между контрольными точками.
Первое, что нужно понять о Gasper, это то, что время само по себе является главной независимой переменной. Время реального мира делится на двенадцатисекундные единицы, называемые «слотами», и каждый слот содержит не более одного блока. Эти слоты, в свою очередь, формируют более крупные группы, называемые «эпохами», и каждая эпоха относится к одной контрольной точке. Каждая эпоха содержит 32 слота, таким образом, их длительность составляет 6,4 минуты. Стоит отметить, что эта парадигма переворачивает причинно-следственную связь между временем и производством блоков по сравнению с PoW. В PoW блоки создаются потому, что был найден валидный хеш, а не потому, что прошло достаточно времени от предыдущего. Но в Gasper блоки производятся потому, что прошло достаточно реального времени для перехода к следующему слоту. Я могу только догадываться, с какими сложными ошибками синхронизации в принципе может сталкиваться такая система, особенно если речь идет не об одной программе, работающей на одном компьютере, а о десятках тысяч пытающихся синхронизироваться между собой компьютеров по всему миру. Остается только надеяться, что разработчики Ethereum знакомы со списком ложных представлений программистов о времени.
Теперь предположим, что вы запускаете узел валидатора и впервые синхронизируете блокчейн. Из одного только того наблюдения, что определенные блоки ссылаются на определенные временные метки, как вы можете быть уверены, что эти блоки действительно были произведены в это время? Если формирование блоков не подразумевает никакой дополнительной работы, не могла ли злонамеренная группа валидаторов имитировать полностью, от самого блока генезиса, фальшивый блокчейн? И если вы увидите два конкурирующих блокчейна, как вы определите, какой из них истинный?
Это подводит нас к четвертому принципу PoS, который заключается в том, что PoS полагается на субъективную истину. Объективного способа выбора между двумя конкурирующими блокчейнами просто нет, и любые новые узлы сети в конечном счете должны доверять какому-то существующему источнику истины в разрешении любой двусмысленности. Это сильно контрастирует с Биткойном, где «истинной» цепочкой всегда является та, по которой проделано больше всего работы. Тысяча узлов может указывать вам на ветку X, но если один узел транслирует ветку Y и она содержит больше работы, то Y является истинным состоянием. Заголовок блока может доказать собственную ценность, полностью устраняя потребность в доверии.
Полагаясь на субъективную истину, PoS возвращает необходимость доверия. Я признаю, что, возможно, несколько предвзят, поэтому, если хотите услышать и другую точку зрения, то в этом эссе Виталик описал свои взгляды. Я также признаю, что на практике разделение блокчейна кажется не таким уж вероятным, учитывая правила Casper, но даже так я получаю некоторое душевное спокойствие в Биткойне от того, что такая возможность просто исключена.
Создание блоков и голосование
Теперь, когда мы знакомы со слотами и эпохами, как создаются отдельные блоки и проходит голосование по ним? В начале каждой эпохи полный набор валидаторов «случайным образом» разбивается на 32 группы, по одной на каждый слот. В каждом слоте один валидатор «случайным образом» выбирается в качестве производителя блока, а остальные в качестве голосующих (или «аттестующих»). Я заключаю выражение «случайным образом» в кавычки, потому что процесс должен быть детерминированным, поскольку все должны однозначно договориться об одних и тех же сетах валидаторов. Однако этот процесс также должен быть неэксплуатируемым, поскольку быть производителем блоков — это очень привилегированное положение благодаря дополнительной прибыли, доступной через Miner Extractable Value, или, как ее еще сейчас стали называть, Maximum Extractable Value. Вот отличная статья на эту тему, кому интересно и кто читает по-английски: Ethereum is a Dark Forest.
Когда блок создан, как другие валидаторы голосуют или «аттестуют» его? Предложение блока должно происходить в течение первой половины (шести секунд) слота, а аттестация — во второй половине, так что теоретически у аттестаторов должно быть достаточно времени, чтобы проголосовать за блок своего слота. Но что произойдет, если автор блока не в сети, не выходит на связь, или строит на основе плохого блока? Работа аттестующего не обязательно заключается в том, чтобы голосовать по блоку этого слота, а скорее по тому, какой блок «выглядит наилучшим» с их точки зрения в данный момент времени. В нормальных условиях это обычно будет блок из данного слота, но может быть и более старый блок, если что-то пошло не так. Но что это значит с технической точки зрения: какой блок «выглядит наилучшим»? Именно здесь на помощь приходит алгоритм GHOST.
GHOST расшифровывается как «Greediest Heaviest Observed SubTree» (самое жадное и тяжелое поддерево) и представляет собой «жадный» рекурсивный алгоритм для поиска блока с самой «недавней активностью». По сути, этот алгоритм рассматривает все последние блоки в виде дерева и идет по дереву, жадно выбирая ветку с наибольшим количеством совокупных аттестаций по всей этой подветви. В эту сумму засчитывается только самая последняя аттестация каждого валидатора, и в конечном итоге процесс останавливается на каком-то из листовых блоков.
Аттестации — это не только голоса за текущий лучший блок, но и за самую последнюю контрольную точку, которая привела к этому блоку. Стоит отметить, что в Gasper контрольные точки основаны на эпохах, а не на высоте блоков. Каждая эпоха ссылается ровно на один контрольный блок, который является либо блоком в первом слоте этой эпохи, либо, если тот слот был пропущен, то самым последним блоком перед тем слотом. Один и тот же блок теоретически может быть контрольной точкой в двух разных эпохах, если в эпохе каким-то образом оказались пропущены все слоты, поэтому контрольные точки представляются с помощью пар эпоха – блок. На схеме ниже EBB означает Epoch Boundary Block (граничный блок эпохи) и представляет контрольную точку для конкретной эпохи, а LEBB расшифровывается как Last Epoch Boundary Block (последний граничный блок эпохи) и представляет самую последнюю контрольную точку в целом.
Подобно Casper, контрольная точка становится утвержденной, когда общее количество аттестацией превосходит 2/3, и финализированной, если за ней сразу последовала другая утвержденная контрольная точка в следующей эпохе. Пример того, как работает это голосование, показан на схеме ниже.
В Gasper есть два условия для слешинга, аналогичные правилам Casper:
- Нельзя голосовать дважды в одну эпоху.
- Контрольные точки, за которые голосует валидатор, не могут пересекаться или включать в промежуток между собой другие контрольные точки из других эпох, за которые он голосовал.
Хоть основаны на эпохах, а не на высоте блока, правила Casper по-прежнему гарантируют, что две финализированные контрольные точки не могут произойти на разных ветках блокчейна без слешинга 1/3 валидаторов.
Стоит также отметить, что аттестации включаются непосредственно в сами блоки. Подобно тому, как в PoW блок обосновывает свою подлинность собственным хешем, завершенная контрольная точка в PoS обосновывает свою подлинность через все свои прошлые аттестации. Когда кто-то нарушает правила слешинга, эти плохие аттестации включаются в блок, подтверждающий нарушение. Чтобы обеспечить стимул для наказания нарушителей, предусмотрено также небольшое вознаграждение для производителя блока, который включил в него нарушение.
Форки
Интересно подумать о том, что произойдет в случае форка. Напомню вкратце, что форк — это изменение правил консенсуса, и они бывают двух видов: хард- и софтфорки. В хардфорке новые правила не имеют обратной совместимости, что может привести к появлению двух конкурирующих блокчейнов, если не все поддержат и установят обновление, реализующее новые правила. В софтфорке новые правила являются более ограничительными, чем старые, но сохраняют обратную совместимость. Как только более 50% майнеров или валидаторов начинают применять новые правила, механизм консенсуса переключается без разделения блокчейна. Софтфорки обычно ассоциируются с апгрейдами и новыми типами транзакций, но технически они также включают любой тип цензуры, вводимой большинством в 51%. В PoS также есть третий тип «форка», которого нет в PoW: разделение блокчейна без каких-либо изменений в его правилах. Но так как об этом мы уже говорили, сосредоточимся на хард- и софтфорках.
Начнем с самого простого случая: отдельного спорного хардфорка. Под спорным я подразумеваю изменение, разделяющее пользователей политически. Исправление ошибки или незначительное техническое изменение, скорее всего, не вызовет разногласий, но что-то вроде изменения награды за проверку, вероятно, вызовет. Если хардфорк в достаточной мере спорный, он может привести к разделению блокчейна, и экономически разрешался бы путем продажи пользователями одной цепочки и покупки другой. Это было бы похоже на хардфорк с образованием Bitcoin Cash в 2017 году, где, похоже, есть явный победитель:
Теперь предположим, что валидаторы однажды решили, что им платят недостаточно, и решили повысить себе вознаграждение с 5%/год до 10%/год. Это был бы явный компромисс в пользу валидаторов за счет невалидаторов. В случае разделения блокчейна, какая ветка выиграет?
Это подводит нас к пятому принципу PoS: деньги — это власть. Из 120 млн находящихся в обращении ETH, более 10% находятся в стейкинге, как показано на графике ниже.
В случае спорного хардфорка между валидаторами и невалидаторами, если предположить, что все невалидаторы сбросили по рыночной цене токен новой цепочки, а все валидаторы сбросили по рыночной цене токен старой, то теоретически победит старая цепочка, так как большинство ETH по-прежнему будет принадлежать невалидаторам (90% против 10%). Но есть еще несколько моментов, которые необходимо учитывать. Во-первых, после любого разделения валидаторы по-прежнему будут «контролировать» оба блокчейна. А если валидаторы могут влиять на другую цепочку, то они могут быть заинтересованы в том, чтобы она потерпела неудачу. Во-вторых, существует также «ядерный вариант», о я уже говорил выше, когда новая цепочка может подвергать слешингу (изымать залог для стейкинга) всех, кто продолжает валидировать старую цепочку, чтобы заставить их присоединиться к новой. Наконец, валидаторы, скорее всего, будут иметь значительное социальное и политическое влияние на остальных участников сети. Если Виталик, Ethereum Foundation и биржи в один голос решат, что собираются повысить награду за стейкинг, мне трудно поверить, что обычные пользователи Ethereum и валидаторы смогут сохранить старую версию блокчейна, а также сделать его более ценным за счет давления покупателей.
Переходя к софтфоркам, что произойдет в спорных софтфорках, например, удовлетворяющих цензурные требования OFAC? Валидаторы достаточно централизованы, как мы видим на графике ниже.
В отличие от PoW, где майнеры могут переключаться с пула на пул одним нажатием пары кнопок, в Ethereum валидаторы привязаны к контракту стейкинга до тех пор, пока их транзакция выхода не будет обработана. Если Lido и ведущие биржи будут вынуждены подвергать цензуре определенные транзакции, они легко преодолеют большинство в 2/3 голосов, необходимое для принятия решения о контрольных точках. Ранее мы видели, как Виталик и другие валидаторы ETH могли бы попытаться противостоять «цензурному» софтфорку через образование собственного контрцензурного хардфорка, уничтожая залог цензоров в процессе. Но даже если им удастся создать успешный форк, в процессе будет уничтожено большое количество ценности — как в слешинге, так и в результате потери доверия.
В заключение
В этом эссе мы рассмотрели, как PoS решает проблему двойной траты с помощью Gasper, комбинации протокола под названием Casper (определяющего правила о контрольных точках и слешинге) и правил выбора «лучшего блока» под названием GHOST. Коротко напомню, что Gasper делит время на единицы, называемые слотами, каждый слот может содержать не более одного блока, а слоты группируются в эпохи, где каждая эпоха ссылается на одну контрольную точку. Если за контрольную точку проголосовало большинство в 2/3 голосов, она становится утвержденной (или «обоснованной», ориг. justified), а в случае успешного утверждения двух контрольных точек подряд с минимальным интервалом первая из них считается финализированной. Как только контрольная точка становится финализированной, становится невозможной финализация параллельной цепочки, разве что путем слешинга 1/3 валидаторов.
В этом процессе мы выявили пять принципов PoS:
- В PoS используется негативная (основанная на штрафах) структура стимулов.
- PoS — это система с различными уровнями доступа.
- В PoS нет окончательных правил.
- PoS полагается на субъективную истину.
- В PoS деньги — это власть.
И каждый из этих принципов противоположен PoW:
- В PoW используется положительная (основанная на вознаграждении) система стимулов.
- PoW — это система без уровней доступа: каждый может начать или прекратить майнинг в любой момент.
- В PoW форки, которые изменяют правила, игнорируются.
- PoW опирается на объективную истину.
- В PoW майнеры обслуживают пользователей и сами обладают незначительной властью.
Я считаю, что каждый должен стремиться создать такой мир, в котором он сам хотел бы жить. Если, как и я, вы хотите жить в мире без разных уровней доступа, где вы можете контролировать свои деньги, где тяжелая работа вознаграждается, а пассивное владение является ответственностью, и где ваши деньги будут хранить свою ценность далеко в будущем, не меняясь по чьей-то прихоти, тогда вам стоит хорошо подумать о компромиссах между PoW и PoS, и бороться в пользу тех принципов, по которым вы хотите жить.
Источник: bitnovosti.com