Использование фильтра Блума в узлах SPV

Я знаю, что такое фильтр Блума (BF), и я в курсе этого поста и этой статьи . Но я не понимаю, как это используется в биткойнах.

Я могу себе представить, что узел SPV кодирует интересующие его транзакции в BF и отправляет их на полный узел. Чего я не понимаю, так это того, что после этого делает полный узел?

Просматривает ли он все предыдущие транзакции и проверяет, какая из них находится в BF, и отправляет ли ее на узел SPV?

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


Если цель состоит в том, чтобы сохранить конфиденциальность запроса SPV, то необходимо использовать некоторые изощренные подходы, такие как поиск частной информации или забывчивый RAM, но они не эффективны для настройки биткойнов.

Ответы (1)

Я могу себе представить, что узел SPV кодирует интересующие его транзакции в BF и отправляет их на полный узел. Чего я не понимаю, так это того, что после этого делает полный узел?

Полный узел проходит через каждую транзакцию в блокчейне. (Или, по крайней мере, каждую транзакцию, которая произошла после создания кошелька.) Он проверяет следующие вещи по фильтру Блума.

  1. Проверьте хэш самой транзакции.
  2. Для каждого вывода проверьте каждый элемент данных выходного скрипта. Это означает, что каждый хеш и ключ в выходном скрипте тестируются независимо. Важно: если выходные данные совпадают во время тестирования транзакции, узлу может потребоваться обновить фильтр, вставив сериализованную структуру COutPoint. Подробности смотрите ниже.
  3. Для каждого входа протестируйте сериализованную структуру COutPoint.
  4. Для каждого ввода проверьте каждый элемент данных входного сценария (примечание: входные сценарии всегда содержат только элементы данных).
  5. В противном случае совпадений нет.

( Источник .)

Если он совпадает, он отправляется на узел SPV. Узел SPV отбрасывает ложные срабатывания.

Если цель состоит в том, чтобы сохранить конфиденциальность запроса SPV, то необходимо использовать некоторые изощренные подходы, такие как поиск частной информации или забывчивый RAM, но они не эффективны для настройки биткойнов.

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

Если вы знаете об одном, дайте мне знать. :) Всегда интересно услышать о таких вещах.

Спасибо за ответ и источник. В ссылках, которые я предоставил в своем вопросе, говорится, что фильтр Блума также используется, чтобы скрыть (в некоторой степени) запрос узлов SPV, но мне не ясно, как это достигается.
Фильтры Блума, естественно, имеют ложные срабатывания. Если ключ соответствует фильтру Блума, вы не можете сказать, совпадает ли он, потому что этот ключ находится в кошельке пользователя, или потому что это случайное ложное срабатывание. Однако есть способы подорвать это, например, проверить как ключ, так и публичный ключ, как описано в документе, на который вы ссылаетесь.