Что значит Neutrino для биткоина?

408
Просмотры
Neutrino для биткоина

В блоге Lightning Labs выложили статью про Neutrino, в которой рассказали про особенности проекта и его значение для сети.

Для наглядности автор блога использует персонажей. Мы сохраним этот подход.

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

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

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

Другой существующий вариант для таких, как Алиса, — это кошельки, основанные на упрощенной платежной верификации (SPV, по BIP 37). Кошельки SPV не имеют централизованных рисков безопасности, описанных выше, но они страдают от проблем с конфиденциальностью. К тому же, нынешнее поколение SPV-кошельков, как правило, медленнее, а использовать их сложнее. Алисе не нравятся медленные приложения, и она ценит свою финансовую конфиденциальность, поэтому такие кошельки — не ее вариант.

Прошло уже шесть лет с тех пор, как было создано последнее предложение по улучшению (BIP), ориентированное на мобильные платформы. В то же время идет рост использования биткоина через мобильные, и это напрямую связано с принятием.

Для решения проблем, описанных выше, Lightning Labs предложили протокол Neutrino (BIP 157, BIP 158). Его авторы: Olaoluwa Osuntokun, Alex Akselrod, Jim Posen.

Преимущества Neutrino

Задача децентрализованных мобильных приложений — взять глобальную историю транзакций биткоинов (в настоящее время около 200 ГБ) и быстро извлекать только те транзакции, которые относятся к отдельному пользователю. Успешное мобильное приложение должно обеспечивать безопасность, конфиденциальность и высококачественный пользовательский интерфейс. Протокол Neutrino был разработан, чтобы все эти требования реализовывались на устройствах с маломощным процессором, ограниченным объемом памяти, ограниченной пропускной способностью, прерывистой мощностью и неустойчивой связью.

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

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

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

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

Как работает Neutrino

На высоком уровне Neutrino основан на цепочке «фильтров». Каждая цепь соответствует блоку в блокчейне биткоина. Эти фильтры используют кодирование Голомба-Райса для представления адресов, содержащихся в блоке. Фильтры Neutrino (так называемые фильтры GCS от «Golomb-Coded Set») представляют собой значительно более сжатый способ представления блока. Они составляют ~15 КБ каждый, а исходные блоки могут быть в 250 раз больше (до ~ 4 МБ).

Это сжатие позволяет устройствам с малой пропускной способностью обращаться к блокчейну и сверять информацию. Вся проверка идет по шагам:

  1. Создание фильтра. Как только добывается новый блок, полные узлы сети вычисляют его фильтры GCS. Эти фильтры отправляются клиентам Neutrino light.
  2. Наблюдение и сравнение фильтров. Примерно каждые десять минут клиенты Neutrino получают фильтр, который сравнивает с кошельком пользователя. Так они определяют, есть ли в нем новые транзакции, которые связаны с пользователем.
  3. Загрузка блока. Если фильтр указывает, что блок содержит совпадающие транзакции, клиент Neutrino запрашивает «разделенный» блок, который содержит все данные транзакции в блоке, но исключает подписи и некоторые другие данные.
  4. Пересчет баланса. Балансы кошельков обновляются по новой информации о транзакциях, а клиент Neutrino обновляется.

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

Синхронизация Neutrino может проходить в урезанном виде, когда клиент отключен. Этот процесс также имеет 4 шага:

  1. Клиент Neutrino будет загружать и проверять заголовки блоков. Каждый заголовок весит 80 байт. Это прибавляет до 40 МБ.
  2. Одновременно с этим загружаются заголовки фильтров. В протоколе Neutrino каждый блок в блокчейне имеет связанный с ним фильтр GCS. Этот процесс подробно описан в документе BIP 157. Каждый заголовок фильтра составляет 32 байта, всего будет около 20 МБ. Заголовки блоков до даты создания кошелька отбрасываются после проверки. Это сохраняет место на диске. Заголовки загружаются и проверяются один раз каждый.
  3. Идет загрузка фильтра GCS для каждого блока, начиная с момента создания кошелька. Общая пропускная способность для фильтров составляет около 70 МБ/месяц, и фильтры не нужно хранить.
  4. Узел Neutrino проверит фильтры, чтобы определить, есть ли транзакции, относящиеся к кошельку пользователя, и если да, то разделенные блоки загрузятся, как описано выше.

Для нового кошелька процесс синхронизации занимает всего несколько минут. Общий объем данных блокчейна, хранящихся на узле Neutrino, составляет несколько десятков Мб. Если сравнить с примерно 200 Гб, которые хранят полные ноды, это совсем немного. После первоначальной синхронизации требования к пропускной еще сильнее снижаются. Это чуть больше, чем требуют SPV-кошельки, но в пределах возможностей большинства устройств.

Разработка в будущем

Дальше команда планирует работать над улучшением производительности.

Они хотят добавить функцию извлечения блоков, чтобы клиенты Neutrino могли загружать блоки или фильтры из любого источника, включая источники за пределами сети Bitcoin P2P. Tor является более выполнимым вариантом.

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

Также команда работает над неизменностью фильтров и созданием среды для разработчиков.

Первая версия клиента Neutrino, совместимых с BIP 157/158, выпущена 17 октября. Пока это бета для тестовой сети. Поддержка Neutrino в перспективе может попасть в Bitcoin Core.