Какие изменения Биткойна требуют консенсуса?

why-some-changes-to-bitcoin-require-consensus-bitcoin-s-layers

Споры о размере блока и появление нескольких разных вариантов развития криптовалюты выявили, что не все ноды биткойна работают по единым правилам. И что еще более важно — не все команды разработчиков используют единые принципы при непосредственном применении этих правил на практике.

Команда разработчиков Bitcoin Core, обслуживающая исторически доминирующий биткойн-клиент, требует широкой поддержки сообщества (консенсуса) для принятия изменений в некоторых правилах, например таких как увеличение размера блока. В то время как другие изменения могут проходить незамеченными широкой аудиторией и приниматься по другим стандартам.

Некоторые биткойн-форки, как Bitcoin LJR, получают, в основном, широкую поддержку в кругах разработчиков. А другие, как Биткойн Классик, вызывают горячие споры. Кому-то это может показаться странным.

Попробуем в этом разобраться. Разные предложения изменений правил работы биткойна имеют разное влияние на работу сети. Или, точнее, разные изменения затрагивают разные уровни правил криптовалюты. Изменение некоторых правил может разделить сеть, а изменение других — нет.

Чтобы было удобнее понимать разные предложения об изменении правил, Эрик Ломброзо, разработчик Bitcoin Core и CEO компании Ciphrex, недавно предложил классифицировать правила работы сети на несколько уровней. В своем «предложении по улучшению биткойна» (Bitcoin Improvemnt Proposal или BIP) под названием BIP 123, он выделил 4 главных уровня правил с градацией по их важности для работы сети.

1. Правила консенсуса

Правила консенсуса являются самыми важными законами, по которым работает криптовалюта. Они определяют, например, количество биткойнов в награде майнерам за обработку блока, сложность хеширования при майнинге, тип подтверждения о проделанной работе (proof-of-work) и, безусловно, максимальный размер блока.

Эти правила очень важны, т.к. они определяют характеристики блока, которые должны будут принять все участники сети. Наличие единых консесуальных правил дает уверенность в том, что все участники сети работают опираясь на идентичные копии блокчейнов.

Если разные ноды будут применять разные правила, то существует риск валидации тех блоков, которые могут быть отвергнуты другими нодами. Эти разночтения могут привести к поддержке участниками сети совершенно разных и несовместимых блокчейнов, тем самым разделив сеть биткойна.

Правила консенсуса биткойна могут быть изменены двумя путями. Изменение, которое добавляет новые правила к протоколу (тем самым делая валидные блоки по старым правилам невалидными по новым), называется софт форк (мягкая развилка). Принятие софт форка требует поддержки большинства хеш-мощности системы. Блоки, которые производятся по новым правилам, будут также валидны и по старым правилам. Таким образом, участники, не выполнившие обновление правил, все равно будут оставаться в длиннейшей цепочке.

Тем не менее, необновившиеся участники могут майнить блоки, которые не будут приняты по новым правилам, тем самым тратя хеш-мощности впустую. Также необновленные полные ноды больше не смогут сами верифицировать соответствие блоков новым правилам, и будут вынуждены ждать дополнительных подтверждений по сравнению с обновившимися участниками.

По этим (и другим) причинам, команда Bitcoin Core заявила, что в большинстве случаев будет требовать для принятия софт форков абсолютного большинства майнеров — 95%.

Изменение правил, которое удаляет правила из протокола (делая часть невалидных блоков по старым правилам валидными по новым) называется хард форк (жесткая развилка). Хард форк требует немедленного обновления правил всеми участниками сети. Любой нод, который не принял изменения, отклонится от главной вычислительной цепочки, тем самым считая главную цепочку, работающую по новым правилам, неверной, и продолжит следование старым правилам. Хард форк также может привести к разделению сети биткойна. Как долго это размежевание будет продолжаться является не техническим вопросом, а скорее вопросом политики, социологии, экономики, теории игр и др.

Изменение правил консенсуса при софт форке может в худшем случае (при отсутствии консенсуса между участниками сети) привести к тому, что часть майнеров будет тратить вычислительные мощности впустую, а также слегка уменьшит безопасность полных нодов.

Изменения правил консенсуса при хард форке может в худшем случае разделить сеть биткойна.

2. Уровень взаимодействия (peer-to-peer)

Уровень взаимодействия сети биткойна включает в себя правила, описывающие как полные ноды должны обмениваться данными, и что это должны быть за данные. Это включает в себя правила протокола об отправке и приеме транзакций и блоков, а также специальных дополнений, таких как Segregated Witnesses (SegWit) или Invertible Bloom Lookup Tables (IBLT).

Самое главное — правила уровня взаимодействия должны обеспечивать распределение новых блоков по сети (а также дополнительных данных, необходимых для верификации этих блоков). Если эти правила не будут соблюдаться, это может привести к разделению сети, где разные участники будут иметь разные копии блокчейна, по крайней мере пока новые блоки не будут распределены между всеми участниками сети.

Но, в отличие от правил консенсуса, несоблюдение правил взаимодействия частью участников не создаст большой проблемы, т.к. большинство нодов передают блоки как минимум 8ми другим участникам. Такое усиленное распределение должно гарантировать, что все ноды получают актуальные блоки, даже если часть участников не выполняют передачу корректно.

Еще большую свободу действий ноды имеют при ретрансляции транзакций. Большинство нодов биткойн сети используют правило «первой поступившей транзакции»(first seen): если они получают 2 или более конфликтующие транзакции, то принимают ту, которая поступила первой. Но сейчас все большую популярность среди нодов набирает правило «замены комиссией» (replace-by-fee, RBF), когда нод включает транзакцию с самой большой уплаченной комиссией, независимо от того, какая из них поступила первой. Также некоторые ноды могут принимать лишь определенный тип транзакций, либо вообще не заниматься их ретрансляцией.

Из выше сказанного следует, что майнеры обладают абсолютной властью решать какие транзакции включить в блок. Это значит, что если правила ретрансляции транзакций будут сильно отличаться у разных нодов, либо будут подвергаться жесткой фильтрации, то это может привести к непредсказуемому времени подтверждения транзакций только лишь из-за расхождений в этих правилах.

Изменение правил взаимодействия в худшем случае (при отсутствии консенсуса между участниками сети) может привести к разделению сети. Это произойдет, если блоки не смогут распределяться по всей сети. Разделение, однако, будет автоматически устранено при возобновлении синхронизации сети.

Если изменение правил касается только обработки транзакций, то в худшем случае это может привести к появлению неподтвержденных транзакций. Это может также привести к уменьшению надежности неподтвержденных транзакций, но не может вызвать разделения сети.

3. Уровень интерфейса программирования приложений (API) и удаленного вызова процедур (RPC)

Уровень API и RPC является коммуникационной надстройкой над уровнем взаимодействия. Много биткойн-приложений, таких как мобильные кошельки или блокчейн-обозреватели, взаимодействуют с блокчейном через этот уровень, подключаясь к API или программной библиотеке.

Если этот уровень перестанет функционировать, то все подключенные к нему программы не смогут взаимодействовать с сетью биткойна. Мобильные кошельки не будут знать получили ли они биткойны, а биткойн-обозреватели не увидят появления новых блоков. Но, тем не менее, все остальные биткойн-пользователи ничего не заметят, и сеть будет функционировать исправно.

Изменение правил уровня API и RPC может в худшем случае (при отсутствии консенсуса между участниками сети) оборвать доступ пользователей этого уровня от сети биткойна. Но это не сможет разделить саму сеть.

4. Уровень приложений

Правила уровня приложений описывают создание и использование разного вида данных биткойн-программами. Это никак не влияет на сеть напрямую, но синхронизация этих правил между разными приложениями будет очень удобна на практике.

Например, форматы адресов, генерации приватных ключей или резервных копий кошельков. Если один кошелек сгенерирует адрес, который другой кошелек сочтет неверным, то выполнение транзакций между ними будет невозможно. Или если один кошелек генерирует один код восстановления адреса, а другой кошелек — другой, то пользователи не смогут восстановить приватные ключи через любой кошелек. То же самое и при восстановлении целых кошельков.

Изменение правил уровня приложений может в худшем случае (при отсутствии консенсуса между участниками сети) не позволить пользователям разных приложений взаимодействовать между собой и вызвать другие неудобства. Эти изменения не могут разделить сеть.

Благодарность за технический анализ выражается Эрику Ломброзо

Автор: Аарон ван Вирдум

Источник: bitcoinmagazine



Categories: Безопасность, Майнинг, Приложения, Разработчикам, Стандарты, Теория, Технологии

Tags: , , , , , , , , , ,

Leave a Reply

Оставьте первый комментарий!

Notify of
avatar
wpDiscuz