Как именно работает SPV?

Вот что у меня есть до сих пор:

  1. Мобильный телефон подключается к узлу с помощью rpc.
  2. Затем мобильный телефон запрашивает узел, чтобы дать ему набор транзакций для набора открытых ключей.
  3. Затем узел ищет любые транзакции, которые соответствуют предоставленным открытым ключам, и возвращает их обратно на мобильный телефон.

Мобильный телефон может настроить фильтр Блума, чтобы некоторые из включенных ключей не принадлежали ему?

Кроме того, когда узел получает запрос, ему нужно заново сканировать блокчейн, чтобы получить историю транзакций?

Ответы (1)

Мобильный телефон подключается к узлу с помощью rpc.

Узлы не соединяются друг с другом с помощью RPC. RPC предназначен для владельцев узлов и обычно имеет длинный пароль.

Затем мобильный телефон запрашивает узел, чтобы дать ему набор транзакций для набора открытых ключей.

Не совсем. Прежде всего, в заголовках блоков есть часть под названием «Корень Меркла», которая позволяет клиентам проверять, была ли транзакция в блоке. Теоретически, как описано в технической документации, узлы SPV могут хранить заголовки блоков и запрашивать у других узлов подтверждение Merkle их транзакции. На практике все сложнее. В настоящее время 99% узлов SPV используют BIP 37 . Кроме того, исследуются более совершенные методы SPV, такие как BIP 157 и Neutrino .

Кроме того, когда узел получает запрос, ему нужно заново сканировать блокчейн, чтобы получить историю транзакций?

Узлы должны сканировать всю цепочку блоков на наличие транзакции, если они не знают ее высоту блока, если они не используют txindex=1и т. д. Если они это делают, доступ к ней тривиален.

Если мобильные/легкие клиенты не используют rpc, как они могут запрашивать узлы с помощью таких команд, как gettxout? Или другие люди для запроса узлов с помощью gettxout? Кроме того, если я дам узлу открытый ключ, а не транзакцию, тогда ему нужно будет сканировать всю цепочку? Потому что легкие кошельки дают открытые ключи для полной ноды, а не транзакции, насколько я понимаю.
Они не используют gettxout. Вот что они используют . Кроме того, SPV никогда не раздают открытые ключи, поскольку это может нанести ущерб конфиденциальности.
О, я думал, что filteradd — это команда rpc. Если они не раздают публичные ключи, то когда spv уйдет на какое-то время, он скачает заголовки, как только вернется, и что потом отправит на ноду, чтобы получить соответствующую информацию? Я вижу данные в filteradd, но что это за данные? Спасибо еще раз за помощь
Собственно, моя ошибка. Они раздают открытые ключи вместе с некоторыми поддельными открытыми ключами. (Только узлы загрузки до Bip37 не используют открытые ключи, также известные как «обрезанные».) Как описано в таблице ниже merkleblock, узлы отправляют хэши [всех транзакций в этих блоках]. Filteradd сообщает узлам, какие публичные ключи интересуют SPV. Если блок не прошел фильтр Блума, узлы могут опустить хэши tx и сохранить данные. Может дать более подробную информацию: bitcoin.stackexchange.com/a/11721/38618
Ааа ладно, таблица очень полезная. Спасибо за информацию