Что включает в себя реализация полного узла биткойн? (Russian)
Часто в прессе я вижу много противоречивых сообщений о том, чем фактически «является» реализация полного узла биткойн. Я счел это прекрасной возможностью попробовать разъяснить все как можно проще и собрать всю информацию в одном месте. Надеюсь, это поможет устранить путаницу. Отдельное спасибо Мэтту Коралло (основному разработчику) и моим коллегам из Purse за помощь мне при подготовке первоначальных черновиков, благодаря которой я справился так быстро.
Что такое полный узел и что он может делать?
Проще говоря, полный узел биткойн может играть роль основы сети биткойн, даже если все остальные узлы станут недоступны в сети и перейдут в автономный режим. По определению полные узлы должны быть в состоянии в полной мере соблюдать уникальные правила протокола биткойн. С учетом этого критерии, которые определяют различные типы узлов в сети, выполняющих полную проверку, могут немного отличаться, но по большей части используется общепринятый стандарт.
Иными словами, эффективный полный узел будет проверять каждый блок входящих транзакций, который он получает. Его цель при этом состоит в обеспечении того, чтобы все в этом блоке было полностью «действительным» (с учетом всех согласованных правил). Это позволяет полному узлу быть уверенным в общей целостности блока без необходимости доверять конкретному майнеру, который создал его.
Для того чтобы придерживаться набора согласованных правил биткойн, ваш полный узел должен быть способен выполнить следующее:
- Проверить наличие у транзакций в каждом конкретном блоке всех правильных подписей для корректного расходования биткойн в текущий момент.
- Убедиться, что каждый блок может создать только определенное число биткойнов на каждый блок (который в настоящее время равен 12,5 биткойнов).
- Проверить представление транзакций/блоков в правильном формате.
- Проверить отсутствие в блокчейне двойной траты итога транзакции.
Полные узлы, которые описаны выше (также имеются другие правила, но они выходят за рамки темы этой публикации), эффективно активно участвуют в работе сети биткойн. Эти узлы постоянно проверяют, соответствуют ли транзакции/блоки всем согласованным правилам. Они также могут использоваться для цели перенаправления блоков другим полным узлам сети (если включена переадресации портов; подробнее об этом рассказывается ниже, но это не является непосредственным требованием для того, чтобы считаться полным узлом). Эти требования гарантируют, что блокчейн биткойна останется неизменным (не допускающим изменений), и его безопасности ничего не будет угрожать.
Текущий размер базы данных блокчейна после полной загрузки и проверки окажется примерно равным 110 ГБ (сведения о размере исторических данных можно найти здесь).
Поскольку сейчас нет никакой формальной спецификации биткойн, эталонный клиент (широко известный под названием Bitcoin Core) часто упоминается как лучшая спецификация для большинства разработчиков биткойн. Это гарантирует, что реализация останется полностью совместимой и не будет раздваивать сеть.
Дополнительные требования: некоторые полные узлы помогают передавать информацию о транзакциях другим узлам и обычно управляются такими сервисами, как обменники, исследователи блоков и майнеры (часто называются «экономические полный узлы»).
Услуги сети P2P
Полные узлы, которые также используются для проверки соответствия согласованным правилам, также могут предоставлять различные услуги активным участникам сети P2P.
Эти дополнительные услуги также играют ключевую роль в обеспечении безопасности легких узлов (SPV-клиентов) и позволяют обеспечить наличие у легких узлов точных сведений о транзакциях, так как они не обрабатывают весь блокчейн и должны ссылаться на полный узел для выполнения соответствующей синхронизации.
В число услуг, предоставляемых полными узлами, может входить следующее:
- Предоставление действительных исторических данных блокчейна новым узлам, которые синхронизируются с сетью, чтобы данные узлы могли оставаться актуальными. Поэтому полные узлы должны хранить полную, актуальную резервную копию базы данных транзакций биткойн.
- Передача данных новых транзакций в сети и оказание содействия в репродуцировании их от пользователей ← → майнеров в другие узлы в сети.
- Фильтрация/проверка всех сетей входящих/исходящих транзакций таким образом, чтобы SPV-узлы (легкие клиенты) также могли проверять сеть и им не приходилось загружать каждую транзакцию, когда-либо выполненную в сети, чтобы найти/обработать собственные транзакции.
- Майнинг когда-то был ключевым аспектом кодовой базы основы биткойн, но с тех пор майнинг биткойнов развился и включил в себя использование время сверхурочной работы ASIC. Хотя по определению полный узел исторически также использовался для майнинга, это конкретное требование было удалено в качестве квалификационного требования для большинства полных узлов. Полные узлы, которые поддерживают майнинг (такие как Bitcoin Core и Bcoin), сейчас обычно интересуют только майнеров.
Основная часть этих услуг предлагается полными узлами после включения ими входящих соединений посредством перенаправления портов их узла на порт 8333. Чем больше полных узлов принимают подключения, тем более безопасной/децентрализованной становится сеть биткойн в целом. Узлами могут управлять частные лица или компании. Однако многие сервисы также часто решают запустить полный узел в облаке (подумайте о AWS/Google). Запустив экземпляр своего полного узла в облаке, компании и разработчики могут обеспечить себе фиксированный узел для постоянного архивирования/резервного копирования всего блокчейна, чтобы они в любое время по своему желанию могли запрашивать из него информацию.
Вы всегда можете просмотреть количество активных, перенаправляющих порты узлов в сети на таких сайтах, как Bitnodes и NodeCounter. Однако важно отметить, что некоторые люди (т.е. люди, для которых важнее всего конфиденциальность) не хотят пересылать свои порты, или, возможно, местная плата за пропускную способность канала для них слишком высока. Мы можем рассчитать довольно корректное приблизительное значение, но по большей части общее реальное число активных узлов неизвестно. И ничего страшного. Децентрализация биткойн не зависит от знания того, что каждый пользователь намеревается сделать со своим кошельком. :)
Открытые порты помогают сети биткойн выполнять инициализацию новых узлов, загружая исторические блоки на новые узлы, выполняющие синхронизацию. Сеть P2P в биткойн помогает противостоять цензуре. Пока где-то (будь то на сервере или в сохраненных данных в какой-либо децентрализованной сети, не подверженной цензуре) имеется копия записи, сеть биткойн будет продолжать существовать и процветать.
Преимущества эксплуатации полного узла
Самое главное — это безопасность! SPV-узлы не обрабатывают весь блокчейн, из-за чего возникает риск принятия ими недопустимых транзакций или блоков. Если только данные сервис не эксплуатирует параллельный экземпляр проверяющего согласованность полного узла с целью перепроверки собственных транзакций, поврежденные блоки/транзакции могут быть обработаны автоматически, что приведет к потенциальному финансовому ущербу/убытку для пользователей сервиса.
Конфиденциальность: то, что вы сами являетесь своим банком, предоставляет вам полный финансовый контроль. Поддерживая работу полного узла, вы можете помочь обеспечить максимальную конфиденциальность ваших транзакций (помните, что публичный блокчейн является … общедоступным). Большинство веб-кошельков и сервисов используют SPV-узлы, и поэтому им приходится передавать свои функции проверки сторонним серверами (в том числе ваши адреса). Эти сервисы знают, какие адреса являются вашими, и могут без особых усилий связать их вместе, чтобы выяснить, кому принадлежат средства из остатков по этим адресам. Чтобы максимально эффективно пользоваться сетью биткойн, вам нужно обеспечить работу полного узла.
Заключение
Полные узлы играют ключевую роль в сети биткойн. Наиболее известные и широко используемые реализации полного узла биткойн способны полностью проверять сеть, как описано выше, и включают в себя следующие узлы: NBitcoin (C#), btcd (Go), bitcoind (C++), и сейчас и bcoin (Node.js). Распространение и принятие этих различных реализаций является важным элементом обеспечения децентрализованной разработки сети биткойн, поскольку позволяет привлечь к этой работе максимально возможное число технических специалистов, находящихся в различных местах мира.
Использованные источники:
https://en.bitcoin.it/wiki/Full_node
https://en.bitcoin.it/wiki/Clearing_Up_Misconceptions_About_Full_Nodes