Как клиенты SPV применяют новый блок?

Пользователи SPV (облегченные) не имеют цепочки. (Ну, у некоторых пользователей SPV есть часть полной цепочки, но у некоторых пользователей SPV есть только заголовки блоков. Я прав?)

Если блок создается майнером и пользователь SPV получает этот блок, он должен добавить этот блок в существующую цепочку блоков, но в этом случае у этого пользователя SPV нет блокчейна, поэтому что пользователь SPV делает с блоком, когда он его получает?

Они просто присоединяют заголовок блока к тому, что есть у пользователя SPV в это время?

Ответы (2)

Пользователи SPV (облегченные) не имеют цепочки. (Ну, у некоторых пользователей SPV есть часть полной цепочки, но у некоторых пользователей SPV есть только заголовки блоков. Я прав?)

Клиенты SPV отслеживают только заголовки блоков, обычно полагаются на другие узлы для проверки достоверности блоков и не хранят полные блоки. Это может показаться похожим на обрезанный узел, который сохраняет только часть последних блоков, но это совершенно другое. Полным узлам нужны полные блоки для обновления состояния их реестра (набор UTXO), сокращенный узел полностью проверяет каждый блок, а затем отбрасывает часть исходной цепочки. Это означает только то, что они не могут обслуживать все блоки другим узлам и что им придется снова загружать блоки, если они переиндексируют, но они всегда сами проверяли полную цепочку блоков. Узлы SPV отслеживают только заголовки блоков, и когда они заинтересованы в блоке, потребляют этот блок полностью. Только после этого они выполняют некоторые проверки работоспособности, например, проверяют, правильно ли сформирован блок. Однако это'

Если блок создается майнером и пользователь SPV получает этот блок, он должен добавить этот блок в существующую цепочку блоков, но в этом случае у этого пользователя SPV нет блокчейна, поэтому что пользователь SPV делает с блоком, когда он его получает?

Клиенты SPV не отслеживают всю книгу, они отслеживают только состояние транзакций, которые они создали или которые были им отправлены. Клиенты SPV используют один из нескольких методов, чтобы узнать, включает ли блок какие-либо интересные транзакции, например, полностью делегируя это третьим сторонам (например, службе кошелька, серверу Electrum), запрашивая одноранговые узлы с полным узлом для запуска фильтра Блума BIP37 клиента SPV на любых новых блоках . , или поиск довольно новых компактных блочных фильтров BIP158 . Как только клиент SPV определил, что он заинтересован в блоке, он либо запрашивает полный блок, чтобы получить фактические данные транзакции, либо запрашивает ветвь Merkle и транзакцию.

Они просто присоединяют заголовок блока к тому, что есть у пользователя SPV в это время?

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

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

Каждый блок в блокчейне имеет размер 1 МБ, тогда как размер заголовка блока составляет всего 80 байт. Общий размер всех заголовков блоков на сегодняшний день составляет всего несколько мегабайт, которые можно легко сохранить на мобильном устройстве.

В блоке транзакции отслеживаются в дереве Меркла, где существование транзакции может быть проверено за время O(log n), если известен путь к транзакции. Таким образом, всякий раз, когда клиент SPV заинтересован в том, чтобы узнать о существовании транзакции, он может загрузить соответствующий блок с полного узла, а затем проверить его.

Теперь перейдем к вашему вопросу

Что ж, у некоторых пользователей SPV есть часть полной цепочки, но у некоторых пользователей SPV есть только заголовки блоков.

Это зависит от того, запросил ли SPV обновленный заголовок блока с полного узла или нет.

что пользователь SPV делает с блоком, когда он его получает?

В идеале он должен распространять блок на узлы, к которым он подключен, но SPV может просто решить отказаться от него и ничего не делать.

Просто прикрепить его заголовок блока к тому, что есть у пользователя SPV в это время?

Это невозможно сделать, так как заголовок блока предыдущего блока не будет совпадать

Фактически, начиная с BIP141, блок может быть больше 1 МБ. bitcoin.stackexchange.com/questions/69468/…