Детальный анализ устойчивости Decred к форку
Credits to Noah Article: Detailed analysis of Decred fork resistance
Уже не секрет, что классические сети PoW являются уязвимыми к форкингу. Мы уже стали свидетелями создания миноритарных монет, которые появились в результате форкинга. В первую очередь, речь идёт о Ethereum Classic, Bitcoin Gold, Bitcoin Cash и Bitcoin SV.
В этом посте объясняется то, как сеть Decred предотвращает осуществление миноритарных форков, на основе анализа, изначально опубликованного davecgh в Reddit. В нём излагаются важные аспекты гибридной консенсусной системы Decred на основе Proof-of-Work (PoW) и Proof-of-Stake (PoS), а также предоставляется детальный анализ того, к чему приведёт попытка разделить блокчейн Decred.
Эта статья будет полезной для тех, кто хотел бы освежить в памяти причины, по которым следует избегать форков:
Форки в блокчейне и разделения чейна: Почему мы должны их избегать.
Исходная информация
Безопасность сети Decred обеспечивается одновременно майнерами PoW и голосующими PoS. Система голосования PoS работает таким образом, что небольшие количества монет складываются в так называемый «тикет для голосования» («voting ticket»). Такие тикеты являются фундаментальными строительными блоками, которые позволяют стейкхолдерам участвовать в Управлении Decred.
Максимальное количество доступных новых тикетов на один блок равно 20. Как только они куплены, предусмотрен период созревания (256 блоков), после которого тикет перемещается в пул тикетов «live». Таргетный размер этого пула — 40960 тикетов, но он может расти или сокращаться в ходе операций. Сложность PoS (цена тикета) корректируется посредством спроса/предложения, чтобы поддерживать таргетный размер на уровне 40960 тикетов. Алгоритм, который контролирует цену тикета, описан в DCP0001.
Тикеты «live» ждут в пуле, пока им не будет предоставлено право голоса, и благодаря этому манипулирование процессом отбора майнерами PoW
становится невозможным. Алгоритм, который контролирует отбор тикетов, в первую очередь, базируется на хеше предыдущего блока: это означает, что он является одновременно псевдорандомным и детерминистским. Если вы строите блок 100 на блоке 99, информация о тикетах, включённых в блок 100, передаётся каждой ноде «full» в сети. Отбор тикетов может быть изменён только в том случае, если будет найдено новое решение для блока 99 с другим хешем, который, в свою очередь, формирует новую серию рандомных тикетов, отбираемых для голосования.
В каждом блоке 5 тикетов имеют право голоса. Как минимум 3 из 5 голосов должны быть включены в блок, в противном случае он не будет принят сетью. Вознаграждение для майнеров PoW сокращается, в случае если включены только 3 или 4 голоса, на 40% и 20% соответственно. Именно так пресекаются действия майнеров, направленные на игнорирование голосов и осуществляемые в попытке обмануть систему.
Очень важным является то, что стейкхолдеры должны присутствовать в заданном чейне, когда их тикеты выбираются. Получение тикета не означает, что он автоматически голосует, ваш кошелёк (или ваш «Voting Service Provider») должен отдать ваш голос в момент, когда тикет выбирается. Это крайне важная особенность, так как она означает, что пул тикетов «live» при миноритарном форке преимущественно состоит из тикетов, не принимающих участие в голосовании, так как их владельцы находятся в другом чейне.
Более детальный обзор теории, на которой базируется каждый из данных аспектов, выходит за рамки этого поста. Тем не менее, речь идёт преимущественно о предотвращении всевозможных конфликтных ситуаций.
Сценарий, предположения и методология
Не забывая обо всём вышеупомянутом, давайте представим себе сценарий, в котором какой-то участник делает попытку осуществить форк, с которым не согласны 75% стейкхолдеров.
Давайте предположим, что обе стороны замышляемого форка обладают равной хеш-мощностью (а именно, 50% на каждый форк). Как указано выше, 75% стейкхолдеров находятся в мажоритарном чейне, а 25% — в миноритарном чейне.
Также давайте предположим, что самый последний блок на момент форка — это блок 99999. Следовательно, обе стороны форка работают над поиском блока 100000, одна сторона — по миноритарному набору правил, а другая — по мажоритарному набору правил.
И наконец, чтобы упростить изложение этого материала и чтобы его логика была более понятной, давайте предположим следующее. Так как только 25% стейкхолдеров находятся в миноритарном чейне, давайте представим, что каждый 4-й тикет в пуле тикетов «live» — это стейкхолдер в миноритарном чейне. Другими словами, тикеты 0, 4, 8, 12, 16, 20, …, 40956 — это тикеты в пуле «live», которые относятся к стейкхолдерам в миноритарном чейне, а тикеты 1, 2, 3, 5, 6, 7, 9, …, 40957, 40958, 40959 — это тикеты в пуле «live», которые относятся к стейкхолдерам в мажоритарном чейне.
Не забывайте: стейкхолдеры должны присутствовать в заданном чейне, когда их тикеты выбираются, чтобы иметь возможность отдавать свои голоса.
Иллюстрация воображаемого сценария.
Пошаговое объяснение
Далее будет представлена цепочка событий, которые произойдут в случае сценария, включающего попытку форкинга, согласно изложенному выше объяснению и иллюстрации.
Блок 100000
- Хеш-мощность в обоих чейнах будет пытаться построить новый блок на блоке 99999.
- Чтобы этот новый блок был построен в миноритарном чейне, он должен получить как минимум 3 голоса из пула тикетов «live», а выбранные голоса будут зависеть от блока 99999.
- Тикеты, необходимые для построения блока 100000, базирующегося на хеше блока 99999, — это номера тикетов 17113, 17331, 21307, 21328 и 24903.
- Очевидно, что 4 из этих 5 тикетов — это стейкхолдеры в мажоритарном чейне (номера тикетов 17113, 17331, 21307 и 24903). Это означает, что они будут голосовать за блок 100000 в мажоритарном чейне.
- Миноритарный чейн может получить только один голос (номер тикета 21328), поэтому он не может построить блок 100000. Вместо этого, он должен вернуться и найти новое решение для блока 99999, чтобы сформировать новый набор тикетов для последующего отбора.
На данном этапе, чейны выглядят таким образом. Скобки с символом * в этом случае означают блоки, над которыми ведётся работа.
… -> [99999] -> (100000*)мажоритарные стейкхолдеры (75%) находятся в этом чейне\-> (99999a*)миноритарные стейкхолдеры (25%) находятся в этом чейне
Другими словами, мажоритарный чейн сейчас работает над блоком 100000, а миноритарный чейн останавливается в поиске нового решения для блока 99999, чтобы получить новый набор тикетов в надежде, что в этот раз они смогут получить как минимум 3 голоса. В связи с тем, что в нашем мысленном эксперименте оба чейна обладают равной хеш-мощностью, мы можем с уверенностью предположить, что в среднем блок 100000 в мажоритарном чейне и новый блок 99999 (назовём его 99999a) в миноритарном чейне будут найдены приблизительно в одно и то же время.
Блок Block 100001
На данном этапе произойдёт следующее:
- Хеш-мощность в мажоритарном чейне будет пытаться построить новый блок на блоке 100000 мажоритарного чейна. Голоса, необходимые для этого блока, — это номера тикетов 563, 6766, 21009, 37394 и 37775.
- В этот раз все 5 из этих 5 тикетов — это стейкхолдеры в мажоритарном чейне. Это означает, что они предоставят свои голоса за блок 100000 в мажоритарном чейне, и благодаря этому построение блока 100001 будет возможным.
- Миноритарный чейн, теперь с новой версией блока 99999 (99999a) обладает новым хешем, поэтому ему нужны номера тикетов 1069, 8007, 16413, 19172 и 31821.
- Миноритарный чейн по-прежнему может получить только 1 голос (номер тикета 19172), поэтому он должен ещё раз вернуться назад и найти ещё одно решение для блока 99999, чтобы создать новый набор тикетов для последующего отбора.
Чейны теперь выглядят таким образом:
… -> [99999] -> [100000] -> (100001*)мажоритарные стейкхолдеры (75%) находятся в этом чейне\-> (99999b*)миноритарные стейкхолдеры (25%) по-прежнему находятся в этом чейне
Другими словами, мажоритарный чейн теперь работает над блоком 100001, а миноритарный чейн ещё раз останавливается в поисках ещё одного решения для блока 99999, чтобы получить новый набор тикетов в надежде, что в этот раз они смогут получить как минимум 3 голоса. В связи с тем, что в нашем мысленном эксперименте оба чейна обладают равной хеш-мощностью, мы опять можем с уверенностью предположить, что в среднем блок 100001 в мажоритарном чейне и новый блок 99999 (назовём его 99999 b) в миноритарном чейне будут найдены приблизительно в одно и то же время.
Блок 100002
На данном этапе произойдёт следующее:
- Хеш-мощность в мажоритарном чейне будет пытаться построить новый блок на блоке 100001 мажоритарного чейна. Голоса, необходимые для этого блока, — это номера тикетов 174, 1999, 12808, 31928 и 38317.
- В этот раз 3 из этих 5 тикетов — это стейкхолдеры в мажоритарном чейне (номера тикетов 174, 1999, 38317). Это означает, что они предоставят свои голоса за блок 100001 в мажоритарном чейне, и благодаря этому построение блока 100002 будет возможным.
- Миноритарный чейн, теперь с новой версией блока 99999 (99999 с), обладает новым хешем, поэтому ему нужны номера тикетов 4653, 15211, 29988, 35175 и 35665.
- Миноритарный чейн по-прежнему может получить только 1 голос (номер тикета 29988), поэтому он должен ещё раз вернуться назад и найти ещё одно решение для блока 99999, чтобы создать новый набор тикетов для последующего отбора.
Чейны теперь выглядят таким образом:
… -> [99999] -> [100000] -> [100001] -> (100002*)мажоритарные стейкхолдеры (75%) находятся в этом чейне\-> (99999c*)миноритарные стейкхолдеры (25%) по-прежнему находятся в этом чейне
Другими словами, мажоритарный чейн теперь работает над блоком 100002, а миноритарный чейн ещё раз останавливается в поисках ещё одного решения для блока 99999, чтобы получить новый набор тикетов в надежде, что в этот раз они смогут получить как минимум 3 голоса.
Быстрая перемотка к блоку 100010
Эта процедура повторяется до тех пор, пока, в конце концов, какой-то версии блока 99999 в миноритарном чейне не посчастливится выбрать 3 тикета в миноритарном чейне. Вероятность такого развития событий 1:10. И когда это случится, то чейны будут выглядеть следующим образом:
… -> [99999] -> [100000] -> [100001] -> [100002] -> … -> [100009] -> (100010*)мажоритарные стейкхолдеры (75%) находятся в этом чейне\-> [99999j] -> (100000a*)миноритарные стейкхолдеры (25%) по-прежнему находятся в этом чейне
Очевидно, что, так как оба чейна характеризуются равной хеш-мощностью, миноритарный чейн ни в коем случае теперь не может догнать мажоритарный чейн. Более того, такая же процедура будет повторяться для миноритарного блока 100001, и он должен будет возвращаться и заново майнить (искать новые решения) для своего блока 100000 снова и снова, пока ему не посчастливится ещё раз получить 3 голоса, которые ему необходимы.
Как следствие, майнеры не будут оставаться в миноритарном чейне, потому что они практически не получают в нём никаких вознаграждений. Миноритарный чейн никогда не будет прибыльным, и поэтому вся майнинговая активность рано или поздно вернётся к мажоритарному чейну.
Распространённые возражения
Что случится, если миноритарный чейн получит хеш-мощность, в 10 раз превышающую хеш-мощность главного чейна?
Теоретически, если миноритарный чейн, утверждённый только 25% стейкхолдеров, получит хеш-мощность, в 10 раз превышающую хеш-мощность главного чейна, он может успешно конкурировать с мажоритарным чейном. Тем не менее, этот сценарий не является реалистичным по причине экономических поощрений.
Майнинг миноритарного чейна с 10-кратной хеш-мощностью на практике означает, что майнеры могут получить лишь 1/10 того вознаграждения по блоку, которое они могли бы получить в мажоритарном чейне, исходя лишь только из хеш-мощности. В нашем сценарии это вознаграждение сокращается ещё больше: это 1/10 от 60% из-за того, что среднем можно включить только 3 голоса. Это означает, что майнеры получают только 6% вознаграждения, которое они могли бы получить в результате майнинга в мажоритарном чейне. Если посмотреть на проблему под другим углом, то они получают на 94% меньше, занимаясь майнингом в миноритарном чейне.
Говоря языком цифр, если, к примеру, майнер обладает 5% общей хеш-мощности сети, он может получить приблизительно 5% вознаграждения PoW за один блок или 5% от ~13,89 ≈ 0,6945 DCR на данный момент. Тем не менее, в миноритарном чейне поначалу вознаграждение составляет 60% от ~13,89 ≈ 8,334 DCR, а затем 5% хеш-мощности будет составлять лишь 0,5% от общей хеш-мощности в миноритарном чейне: таким образом, 0,5% от ~8,334 ≈ 0,04167 DCR. Проанализировав эти цифры, можно сделать вывод, что 0,04167 DCR это в действительности 6% от 0,6945 DCR.
Майнинг PoW отличается очень сильной конкуренцией, так как это игра с нулевой суммой. Большинство майнеров, даже те, которые обладают большими преимуществами (как, например, бесплатное электричество), работают с небольшими прибылями и зачастую полагаются на повышение ценности в будущем, чтобы наверстать упущенное. Учитывая сокращение дохода на 94%, большинство майнеров фактически должны платить за то, чтобы майнить в миноритарном чейне.
Может ли кто-то изменить правила консенсуса для того, чтобы игнорировать стейкхолдеров?
Если бы миноритарный чейн мог устранять или деактивировать голосование по тикетам на определённый период, то он мог бы создавать блоки и осуществлять форки за пределами мажоритарного чейна. Это теоретически возможно. Тем не менее, такие действия бы полностью разрушили гибридную систему и превратили бы разделённую после форка валюту в классическую сеть PoW. И это, безусловно, уже не будет Decred.
В случае классических монет PoW, никто не может с уверенностью утверждать, какой чейн является «настоящим» по причине отсутствия доказуемой и формализированной системы управления. В отличие от монет PoW, Decred обладает очень чёткой и понятной моделью управления. Стейкхолдеры Decred принимают решение касательно того, какой чейн является настоящим и соответствует принципам Decred, и они это делают в манере он-чейн, которая может быть доказана криптографически.
Стейкхолдеры регистрируются на Decred, ожидая, что ключевые консенсусные решения будут приниматься самими стейкхолдерами. Лишить стейкхолдеров полномочий — это всё равно, что исключить Proof-of-Work из классической монеты PoW. Другими словами, это полностью нивелирует особенности системы, связанные с безопасностью. Как повлияет на уровень доверия стейкхолдеров к монете, если эта монета будет игнорировать одну из ключевых характеристик, которую она пообещала предоставить?
Вывод
Благодаря гибридной консенсусной системе Decred на основе PoW и PoS, осуществление форков блокчейна является крайне сложной задачей (если не невозможной), при условии отсутствия утверждения большинством стейкхолдеров. Обзор продемонстрировал, почему сценарий Classic, Gold или Cash крайне маловероятен для сети Decred.
Затраты на поддержание миноритарного форка даже с 10-кратной хеш-мощностью очень существенные; майнеры могут ожидать серьёзное сокращение дохода, если они решат принять участие. В качестве альтернативы, можно устранить и деактивировать систему PoS, и разделить чейн Decred, как любую другую сеть PoW. Тем не менее, это противоречит миссии Decred, и очень сомнительно, что кто-либо всерьёз решится на такой шаг.
Правильное понимание основ устойчивости к форку является очень важным для обеспечения долговечности проекта. Гибридная система PoW и PoS гарантирует сдержки и противовесы, чтобы маленькие группы не могли доминировать над потоком транзакций или производить изменения в Decred без получения согласия со стороны стейкхолдеров. Это поощряет согласованность и сотрудничество, и именно эти характеристики превращают Decred в исключительно сильную сеть, которая нацелена на долгосрочную перспективу.
Дополнительные материалы
В этом посте была изложена важная тема, касающаяся устойчивости к форку, но ещё есть много других аспектов, на которые нужно обратить внимание. Например, гибридная система (PoW и PoS) Decred обладает высоким уровнем защиты от мажоритарных (51%) атак. Если вам интересно было узнать, как это работает, вы можете прочесть пост от Zubair Zia:
Гибридный протокол Decred в качестве средства защиты от мажоритарных атак.
Что касается более продвинутых тем, вы можете узнать, как Decred может беспрепятственно осуществлять апгрейд своей сети посредством голосования по изменениям к правилу консенсуса, или как люди могут отправлять предложения в офф-чейн системе управления, которая называется Politeia. Если вам нужна техническая информация, пожалуйста, ознакомьтесь с документацией Decred.
Выберите одну из платформ для чатов, перечисленных тут, если вы бы хотели пообщаться с представителями сообщества Decred. Мы являемся прагматичной группой людей — присоединяйтесь к нам!
Кто сделал вклад в написание этого поста
Если бы не исходный анализ от davecgh, этот пост, возможно, не был бы опубликован. Кроме того, обзор от Artikozel и конструктивные комментарии в «writers room» кардинально улучшили это пост. Иллюстрация для сценария была создана Zubair Zia. Спасибо вам всем!