Черные списки
На претензии автор обсуждаемой версии bitcoind, пользователь под ником Luke-Jr, ответил, что адреса онлайн-казино заблокированы намеренно. В черный список попали также адреса, используемые протоколами Counterparty и Mastercoin, которые кодируют дополнительную информацию в обычных биткойн-транзакциях.
Завязался спор: пользователи обвиняли разработчика в нарушении базового принципа сетевого нейтралитета, Luke-Jr же настаивал на том, что онлайн-казино и метапротоколы засоряют блокчейн множеством мелких транзакций, преследуя собственные цели, и назвал подобную практику «DdoS-атакой на биткойн»:
«Пока не придумано техники защиты от подобных действий. Но если казино используют одни и те же адреса, их можно заблокировать. Я на скорую руку поправил исходный код, чтобы такие адреса отфильтровывались. Конечно, для канонической реализации такой код не годится, это всего лишь простейшая реализация спам-фильтра.»
Впрочем, в черный список попал и адрес, с которого в мае 2013 года было одновременно отправлено более 8000 мелких транзакций — вероятно, с целью атаки на сеть.
Один из разработчиков Bitcoin Core Майк Херн (Mike Hearn) не одобряет действия Luke-Jr:
«Тот, кто хочет распространять биткойн со столь существенными изменениями, должен создать отдельный проект под собственным именем, чтобы никого не вводить в заблуждение.»
Разработчик Bitcoin Core Грегори Максвелл также не поддерживает идею черных списков:
«В некоторых аспектах все участники сети биткойн должны соглашаться, иначе сеть не будет работать. Мы называем это правилами консенсуса, они отвечают на вопросы вроде «валиден ли блок?». Разногласия в правилах консенсуса опасны для всей системы.»
Впрочем, Максвелл добавил, что это всего лишь его личное мнение, а условия лицензии MIT, на условиях которой распространяется код биткойна, в данном случае нарушены не были.
Luke-Jr впоследствии извинился перед пользователями, но только за то, что оставил свой спам-фильтр по умолчанию включенным и не составил достаточно подробной документации к нему. Сам же подход, допускающий цензуру отдельных адресов, он считает действенным способом борьбы со спамом и надеется, что рано или поздно такой вариант спам-фильтра в качестве дополнительной опции войдет в стандартную реализацию Bitcoin Core.
«Подобные изменения никогда не войдут в официальный репозиторий биткойна, но если люди хотят использовать измененную версию, они могут это делать», —
комментирует ситуацию Владимир ван дер Лаан, ведущий разработчик биткойна.
Но кто вообще может решать, какие изменения войдут в официальную версию Bitcoin Core?
Как разрабатывают биткойн
Для людей, интересующихся криптовалютами, давно уже не новость, что слово «биткойн» многозначно. Оно обозначает и валюту, и сеть, и протокол, и программное обеспечение. Заметим, что «протокол» и «ПО» — это не одно и то же. Протокол — это формальное описание набора правил, следуя которым можно организовать распределенную сеть. Описание протокола было опубликовано Сатоши Накамото в конце 2008 года. Сама же сеть биткойн появилась в январе 2009 года, когда Сатоши опубликовал первую версию эталонной реализации своего протокола и «вручную» создал первый блок.
Программа, которую создал Сатоши, долгое время не имела аналогов и была единственной реализацией протокола Биткойн. Сейчас она называется Bitcoin Core, а ранее была известна как Bitcoin-qt. Заметим, что некоторые современные проекты децентрализованных сетей уже на первом этапе разрабатывают несколько реализаций протокола: например, команда Ethereum одновременно работает над клиентами на языках C++, Go и Python.
Программисты, заинтересовавшиеся идеями Сатоши, постепенно улучшали код Bitcoin Core, написанный на C++. Перед тем, как исчезнуть, Сатоши делегировал право принятия окончательных решений, касающихся официальной версии кода, Гэвину Андресену. В 2014 году Андресен передал это право Владимиру ван дер Лаану, чтобы сконцентрироваться на исследовательской работе в Bitcoin Foundation.
Основной задачей разработчиков биткойн является стабильность работы сети. Изменения может предложить любой, но принимаются они с большой осторожностью. Как же устроен механизм принятия решений при разработке биткойна?
Контроль версий
Исходный код Bitcoin Core управляется системой управления версиями Git. Git — одна из популярных подобных систем, созданная автором Linux Линусом Торвальдсом. Она используется при разработке таких проектов, как Linux kernel, Debian, Ubuntu, Android и Mediawiki. Git позволяет разработчикам видеть, над какой версией проекта они работают, и отслеживать, кто, когда и какие изменения внес.
Разработчики биткойна запускают Git на своих компьютерах и подключаются к центральному серверу, что позволяет работать над проектом одновременно. Этот сервер — Github — хранит множество проектов, принадлежащих разным людям. Биткойн — лишь один из таких проектов.
Может возникнуть вопрос: как вышло так, что разработка инструмента всеобщей децентрализации ведется на централизованном ресурсе? Не могут ли владельцы Github незаметно внести изменения в код биткойна? А что будет, если Github уйдет в офлайн (что в России более чем реально)? На самом деле, никакой проблемы в этом нет.
Git относится к распределенным СКМ с адресацией по содержимому. Это означает, что, во-первых, каждый разработчик перед началом работы должен скопировать последнюю версию кода на свой компьютер. Так что в любой момент времени последняя версия исходного кода биткойн находится как минимум на компьютерах десятков разработчиков. Во-вторых, файлы в Git нельзя незаметно подделать. Для контроля целостности файлов Git использует хэш-функцию (SHA-1), порождающую для каждого набора данных уникальный цифровой отпечаток. Кстати, вычислением похожих функций занимаются и биткойн-майнеры.
Страница на Github считается официальным хранилищем кода Bitcoin Core. Желающие внести изменения в код должны сначала создать его копию — форк. Разработчики могут изменять форки по своему усмотрению (как Luke-Jr изменил свой форк, заблокировав платежи на некоторые адреса). Они также могут создать пулл-реквест, то есть попросить разработчиков о включении своих изменений в основную ветвь проекта.
«Идея состоит в том, что другие разработчики из сообщества будут просматривать предложенные изменения. Если обнаруживаются ошибки, автор пулл-реквеста исправляет их. Иногда приходится объединить усилия сообщества для тестирования, особенно если речь идет о сложных нововведениях или критически важных компонентах», —
объясняет Ван дер Лаан.
Если достаточное количество людей высказывается в поддержку пулл-реквеста, его код сливается с главной веткой. Но кто все-таки принимает окончательное решение?
Таким правом обладают лишь несколько человек. Помимо Ван дер Лаана и Андресена, это Джефф Гарзик, Грегори Максвелл и Питер Вулль. Не очень похоже на демократию, правда?
«Каждый отдельный Github-репозиторий недемократичнен. Технически сложные вопросы не могут решаться всеобщим голосованием», —
считает Ван дер Лаан.
Предложения по улучшению
Разработка Bitcoin Core намеренно очень консервативна, и большинство изменений не носят революционного характера и не вызывают споров. Разработчики биткойна имеют дело скорее с небольшими, последовательными изменениями, а не с революционными нововведениями. Типичный биткойн-патч может переоформить участок кода, сделав его более удобным для чтения, или немного уменьшить расход памяти.
Но есть и изменения, последствия которых могут быть куда более существенными: изменения в правила консенсуса. Для корректной работы сети среди биткойн-клиентов не должно быть разногласий по поводу этих правил.
«Такие изменения изучаются очень внимательно. Сначала идет их обсуждение в списках рассылки, потом формулируется «предложение к улучшению», а пулл-реквесты обычно вызывают споры и долго остаются открытыми, чтобы предоставить время для дискуссии», —
разъясняет Ван дер Лаан.
Предложение к улучшению (Bitcoin Improvement Proposal, BIP) — это документ, предлагающий существенное глобальное изменения в каком-либо аспекте биткойна. Он может затрагивать сущности и вне Bitcoin Core, например, мобильные кошельки или генерацию ключей в аппаратных кошельках. В таком документе также могут выноситься предложения по изменениям процессов вокруг разработки биткойна, в том числе и по алгоритму принятия решений.
Кто угодно может создать BIP, следуя установленному формату. Сообщество обсуждает документ, и если он находит поддержку, его статус может быть изменен на «активное» или «финальное». По словам Ван дер Лаана, шансы предложения быть реализованным повышаются, если автор приложит к нему пример исходного кода, который другие участники могли бы просмотреть и протестировать.
Не читал, но утверждаю
Биткойн-консультант и аудитор по безопасности Сержио Лернер выступает за большую формализацию процесса принятия изменений.
«Когда вы видите, что пулл-реквест слит с основной веткой, сложно сказать, кто принял это решение и насколько тщательно были изучены изменения в коде. Требуется прочесть множество комментариев вроде «+1″, которые могут означать как «я согласен», так и «я поддерживаю идею, но не читал код»».
Лернер выступает за то, чтобы включение изменение в основную ветку требовало бы согласия одновременно нескольких ключевых участников разработки. Этот процесс схож с алгоритмом работы некоторых биткойн-кошельков, где требуется несколько подписей для подтверждения транзакции.
Среди других предложений Лернера — тщательный анализ того, почему обнаруженные баги не были замечены вовремя, организация независимого анализа исходного кода с упором на информационную безопасность, формальное описание документации, которая должна сопровождать каждое изменение кода и пояснять, что именно было изменено.
Проблема в том, что для этого нужны человеческие ресурсы и время:
«Очевидно, что реализация этих идей требует административной работы, бюджета и большего количества разработчиков, которых сейчас не хватает. Но для кода, на котором держится шестимиллиардная индустрия, это оправдано.»
Не только Bitcoin Core
В то время как Лернер подчеркивает важность процессов при анализе предлагаемых изменений, Ван дер Лаан соглашается с точкой зрений Гэвина Андресена, высказанной на Bitcoin Conference 2014:
«В процессах с BIP еще требуется работа. Я был бы счастлив, если бы разработчики альтернативных реализаций протокола, в том числе полных узлов, активнее бы участвовали в обсуждении и написании предложений к улучшению.»
Впрочем, как и всегда в разработке ПО с открытым исходным кодом, слово теперь за пользователями: только они могут воплотить идеи в жизнь. Причем развитие биткойна — это не только усовершенствования Bitcoin Core. Ван дер Лаан считает, что:
«Так как биткойн по природе своей глобален, распределен и не организован, не существует организации, чьей прямой обязанностью было бы поддержание механизма принятия предложений по улучшению. Так что дело за людьми и организациями, которые считают это важным и могут объединиться ради этой цели. В своей речи на конференции Bitcoin Conference 2014 Гэвин отметил, что для него важна диверсификация. Он говорил об альтернативных реализациях полных узлов и даже сказал, что чем больше их, тем лучше. И хотя моя работа — поддерживать разработку Bitcoin Core, я скорее согласен с ним. В первые годы Bitcoin Core был невероятно важен, и разработчики должны были поддерживать инфраструктуру узлов и исправлять баги в любое время дня и ночи. Но для того, чтобы стать глобальной распределенной сетью, биткойн должен мыслить шире.»
Так что, хотя окончательные решения о развитии биткойна действительно принимает небольшая группа людей, но это не значит, что в своих решениях она не опирается на общественную дискуссию — ровно наоборот.
Некоторые разработчики Bitcoin Core даже активно призывают создавать альтернативные реализации протокола, предполагая, что если какая-то из них не будет следовать протоколу, такие клиенты быстро потеряют согласованность с сетью и будут вынуждены играть по общим правилам.
Развитие биткойна в этом направлении создаст условия для воплощения востребованных пользователями идей, сохраняя при этом правила консенсуса. Это также уменьшит давление на небольшую группу людей, поддерживающих технологию, на которой основана быстро растущая отрасль. Если все будет сделано правильно, некоторые из процессов, предложенных Лернером, также могут быть внедрены.
Вопрос заключается в том, сможет ли множество реализаций протокола биткойна бесконфликтно и эффективно сосуществовать. И должны ли авторы альтернативных реализаций протокола обладать правом вводить собственные правила, например, цензурировать неугодные адреса?
По материалам
Coindesk