Я прочитал статью Накамото «Биткойн: одноранговая система электронных денег». В пункте «Упрощенная проверка платежей» он сказал, что можно проверять платежи без запуска полного сетевого узла.
Я не понимаю, как, имея хэш Markle's Tree Root, проверить платеж. На самом деле, чтобы проверить платеж, мне нужно объединить и хешировать все узлы правой или левой ветви, а не только корень.
Более того, как выбрать, какой корневой хеш нужно получить, не видя всех узлов?
Вы правы, чтобы доказать, что транзакция подтверждена в блоке, нужен не только корень Merkle. Необходимая информация называется путем Меркла и состоит из левого/правого листа к вашему транзакционному узлу и правого/левого родителя и так далее до корня.
Вот график, изображающий путь Меркла: http://chimera.labs.oreilly.com/books/1234000001802/ch07.html#merkle_tree_path
Корень и путь Меркла, а также заголовки блоков блокчейна запрашиваются из набора случайных узлов Биткойн. Ваш SPV-клиент не может проверить, что транзакция действительна (не двойная трата, правильные подписи и т. д.), но, поскольку он может убедиться, что транзакция была включена в блок с X подтверждениями, он может предположить, что сеть Биткойн приняла транзакцию. . Таким образом, ваш узел SPV примет транзакцию, полагая, что сеть Биткойн включает в блокчейн только действительные транзакции.
Мне нужно объединить и хешировать все узлы правой или левой ветви
Или вам могут дать большинство этих значений. Если кто-то дает вам значение для правильной ветви, вам не нужна дополнительная информация обо всей этой стороне дерева. И если в конечном итоге вы получите правильное значение корневого хэша, то вы будете знать, что они вам не лгали.
алессандро308
Бьярн Магнуссен