Как можно проверять платежи, не запуская полный сетевой узел?

Я прочитал статью Накамото «Биткойн: одноранговая система электронных денег». В пункте «Упрощенная проверка платежей» он сказал, что можно проверять платежи без запуска полного сетевого узла.

Я не понимаю, как, имея хэш Markle's Tree Root, проверить платеж. На самом деле, чтобы проверить платеж, мне нужно объединить и хешировать все узлы правой или левой ветви, а не только корень.

Более того, как выбрать, какой корневой хеш нужно получить, не видя всех узлов?

Ответы (2)

Вы правы, чтобы доказать, что транзакция подтверждена в блоке, нужен не только корень Merkle. Необходимая информация называется путем Меркла и состоит из левого/правого листа к вашему транзакционному узлу и правого/левого родителя и так далее до корня.

Вот график, изображающий путь Меркла: http://chimera.labs.oreilly.com/books/1234000001802/ch07.html#merkle_tree_path

Корень и путь Меркла, а также заголовки блоков блокчейна запрашиваются из набора случайных узлов Биткойн. Ваш SPV-клиент не может проверить, что транзакция действительна (не двойная трата, правильные подписи и т. д.), но, поскольку он может убедиться, что транзакция была включена в блок с X подтверждениями, он может предположить, что сеть Биткойн приняла транзакцию. . Таким образом, ваш узел SPV примет транзакцию, полагая, что сеть Биткойн включает в блокчейн только действительные транзакции.

Как узел может подтвердить транзакцию? Узел должен запускать все блоки блокчейна, а дерево Меркла используется только для подтверждения достоверности?
Узел SPV использует только заголовки блоков, которые не содержат всего множества различных данных транзакций и, следовательно, составляют всего несколько килобайт. Корень Merkle находится в данных заголовка. Чтобы проверить, подтверждена ли транзакция сетью, клиент SPV оспаривает случайный выбор полных узлов, запрашивая путь Меркла для транзакции. Путь не содержит всего дерева, так как ему нужно только проследить транзакцию до корня, как видно из графика. Если корень известен, невозможно построить «фальшивый» путь Меркла для транзакции.

Мне нужно объединить и хешировать все узлы правой или левой ветви

Или вам могут дать большинство этих значений. Если кто-то дает вам значение для правильной ветви, вам не нужна дополнительная информация обо всей этой стороне дерева. И если в конечном итоге вы получите правильное значение корневого хэша, то вы будете знать, что они вам не лгали.