Является ли модель клиента SPV масштабируемой?

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

Разумно ли ожидать, что миллионы пользователей узлов SPV будут подключаться примерно к 6000 полных узлов?

Ответы (1)

Вообще говоря, фильтр Блума BIP37 SPV имеет ужасное масштабирование, хотя трудно точно сказать, насколько плохо оно работает в реальных условиях.

  • Каждый одноранговый узел должен синхронизировать всю цепочку блоков с момента последнего контакта с сетью, в худшем случае это примерно 50 ГБ. Узел должен загрузить каждый отдельный блок с диска, отфильтровать его в соответствии со спецификациями клиента и вернуть результат. Сумма будет расти до окончания биткойнов или времени, в зависимости от того, что наступит раньше. Без некоторых изменений протокола обрезка несовместима с BIP37 SPV, поскольку она предполагает, что все блоки будут доступны на всех хостах.

  • Для каждого синхронизированного кошелька каждый входящий блок и транзакция должны фильтроваться индивидуально. Это требует значительного количества процессорного времени и должно выполняться для каждого узла по очереди для каждого элемента инвентаря.

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

      Точно так же большая часть прослушивающих узлов размещена на бюджетных провайдерах VPS, которые предлагают одно общее ядро ​​и крайне низкую производительность. У OVH — 300, у Hetzner — 300 , у Digital Ocean — 124, CloudAtCost действительно находится в самом низу списка с 6.

  • BIP37 уязвим для тривиальных атак типа «отказ в обслуживании», доступен демонстрационный код , способный вывести узлы из строя быстрыми запросами инвентаризации через фильтры, вызывающие непрерывный поиск на диске и высокую загрузку ЦП. Заманчиво сказать, что клиенты могут использовать доказательство работы (но это невозможно на устройстве с батарейным питанием, таком как телефон) или микроплатежи (невозможно, если узел еще не знает, что он получил деньги), но на самом деле ни одно из них не предлагает четкого решения. .

  • Также, вероятно, существует намного меньше, чем 6000 прослушивающих узлов, некоторые из которых сокращены, что довольно бесполезно для синхронизации с клиентом SPV, многие прослушивают как IPv4, так и IPV6 и в результате дублируются в этом количестве. Реальное количество фактических узлов, вероятно, больше 5000, а количество их не на аплинках с коммутируемой скоростью значительно меньше.

Разумно ли ожидать, что миллионы пользователей узлов SPV будут подключаться примерно к 6000 полных узлов?

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