Что такое легкие клиенты. Как телефон проверяет блокчейн

Для самостоятельной проверки сети необязательно хранить всю историю блокчейна. Легкий клиент загружает заголовки блоков и криптографические доказательства только для нужных данны
Что такое легкие клиенты. Как телефон проверяет блокчейн
Источник: РБК Крипто

Легкие клиенты снижают требования к памяти и трафику, но не дает той же независимости, что полный узел. Большинство мобильных кошельков работает еще проще: приложение запрашивает баланс и историю у внешнего сервера и показывает готовый ответ. Пользователь в этом случае доверяет оператору сервера. Легкий клиент отличается тем, что способен проверить хотя бы часть полученных сведений самостоятельно.

Чем легкий клиент отличается от полного узла

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

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

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

Как проверка устроена в сети биткоин

Заголовок блока биткоин содержит результат вычислений, подтверждающий затраченную майнерами работу, и корень дерева Меркла — краткое криптографическое представление всех транзакций блока.

Получив ветвь дерева Меркла, легкий клиент может проверить, что конкретная транзакция действительно включена в блок. Затем он убеждается, что заголовок относится к цепочке с наибольшей накопленной работой.

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

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

Стандарты BIP 157 и BIP 158 используют компактные фильтры блоков. Клиент загружает небольшой фильтр, локально проверяет наличие интересующих данных и только при совпадении запрашивает полный блок. Сервер не получает прямой список адресов пользователя.

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

Как это работает в эфириуме

Легкий клиент Ethereum использует комитеты синхронизации. В такой комитет примерно на 27 часов случайно выбирают 512 валидаторов. Они подписывают заголовки последних блоков, а клиент проверяет их объединенную подпись.

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

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

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

Какие риски остаются

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

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

Запросы к одному серверу также ухудшают приватность. Оператор видит сетевой адрес пользователя, время обращений и запрашиваемые блокчейн-адреса. Компактные фильтры Bitcoin уменьшают объем раскрываемой информации, но не скрывают сам факт подключения.

Когда нужен полный узел

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

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

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