MSTR Cat

Блокчейн/Уровень III · Сеть/3.1 Ноды/Урок 6

Bitcoin Core и другие реализации

Один протокол, множество движков: родословная программного обеспечения Bitcoin

МатериалыРаботающая нода Bitcoin CoreДоступ к терминалу или интерфейсу командной строки

Любопытство

  1. Кто решает, что считать блоком, когда два фрагмента кода расходятся?
  2. Почему незначительная ошибка в базе данных способна расколоть цепочку надвое?
  3. Что произойдет с сетью, если самая популярная реализация просто перестанет поддерживаться?

Исследование

  1. Биткоин начинался как единственный клиент на C++, написанный Сатоши Накамото. В 2011 году интерфейс переписали с использованием библиотек Qt, и программа стала называться Bitcoin-Qt. К 2014 году, с версией 0.9, суффикс убрали полностью, и программа получила название Bitcoin Core. Смена названия отражала смену идентичности: это был уже не просто инструмент Сатоши, а каноническая эталонная реализация правил сети.
  2. Руководство кодовой базой перешло от Гэвина Андресена, возглавлявшего проект с 2010 года до своего ухода с этой роли в 2014 году, к Владимиру ван дер Лану. Сегодня небольшая группа мейнтейнеров вливает изменения после тщательного ревью. В 2021 году нумерация версий перескочила с 0.21 на 22.0, что означало зрелость проекта. Крупные релизы выходят примерно дважды в год, и каждый перед выпуском проходит обширное тестирование.
  3. Консенсус — это не только логика, но и побайтово идентичное поведение десятков тысяч нод. В марте 2013 года в версии 0.8 в качестве движка хранения появился LevelDB. Блок, принятый новой версией, был отклонён старыми версиями на Berkeley DB из-за ошибки с лимитом блокировок. Цепочка оставалась разделённой, пока майнеры не откатились на старую версию, — это показало, что скрытое различие в поведении, даже не в самом коде консенсуса, может расколоть сеть.
  4. Альтернативные реализации существуют для того, чтобы ни одна кодовая база не стала единой точкой отказа или захвата. btcd написан на Go, bcoin — на JavaScript, а libbitcoin — на C++. Bitcoin Knots, который поддерживает Люк Дэшджр, — это набор патчей поверх Core с другими настройками по умолчанию, в частности с более строгой фильтрацией транзакций, несущих данные. Floresta использует структуру данных Utreexo для эффективной проверки. Эти проекты служат противовесом процессу разработки Core.
  5. Риск повторной реализации консенсуса высок, поскольку ошибка, из-за которой принимаются недействительные блоки, может привести к финансовым потерям или разделению цепочки. Чтобы снизить его, проект libbitcoinkernel стремится вынести основную логику консенсуса в переиспользуемую библиотеку. Это позволяет другому ПО проверять транзакции, не дублируя всю кодовую базу ноды, и гарантирует, что правила остаются согласованными, даже когда меняется окружающая инфраструктура.
  6. Выполните на ноде 'bitcoin-cli getnetworkinfo', чтобы увидеть её собственную версию, и 'getpeerinfo', чтобы увидеть ПО, о котором сообщает каждый пир (его строку 'subver'). Сеть сохраняет совместимость, несмотря на разные программные стеки, но доминирование Bitcoin Core означает, что фактически именно он задаёт темп обновлений протокола. Необновлённые ноды продолжают следовать за цепочкой при софтфорках, но нода, чьё поведение в части консенсуса расходится с остальными, может быть отрезана от сети.

Ключевые факты

  • В 2014 году с версией 0.9 Bitcoin-Qt был переименован в Bitcoin Core.
  • Владимир ван дер Лан сменил Гэвина Андресена на посту ведущего мейнтейнера в 2014 году.
  • Разделение цепочки в марте 2013 года произошло из-за ошибки с ограничением блокировок в Berkeley DB в более старых версиях.
  • btcd, bcoin и libbitcoin — это альтернативные реализации, написанные на языках Go, JavaScript и C++ соответственно.
  • Bitcoin Knots — производная версия Core с более строгими правилами ретрансляции; её поддерживает Люк Дэшджр.
  • libbitcoinkernel, который всё ещё находится в разработке, призван изолировать код консенсуса для повторного использования другим программным обеспечением.

Упражнение девять, шесть, три, один

9СобратьПеречислите 9 различных реализаций ноды Биткоина или крупных форков основного клиента. Укажите их основной язык программирования и текущий статус поддержки.
6СгруппироватьРазделите эти 9 проектов на 6 категорий в зависимости от их связи с эталонной реализацией: прямой форк, независимое переписывание, библиотека консенсуса, архивный проект, активная альтернатива или экспериментальный проект.
3Выделить главноеСократите 6 групп до 3 аргументов о том, делает ли наличие нескольких реализаций биткоин безопаснее или рискованнее.
1КристаллизоватьНапишите одно предложение о том, как ошибка базы данных в одной реализации может вызвать глобальное разделение цепочки, если поведение в части консенсуса расходится.

Проверка фактов

Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.

Открыть в интерактивной академии →

EN PT ES ZH JA KO DE FR MS