Как и зачем нам нужно валидировать транзакцию?

Я начинаю проводить некоторые исследования о протоколе Биткойн и блокчейне. Я пытаюсь понять все разделы в официальном документе Биткойн. До сих пор я не мог понять, в чем польза добавления корня дерева меркла транзакций в заголовок блока. Да, я знаю, что это сделано для экономии места, как сказано в документе. Но когда это кому-то нужно?

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

Если в разделе 8-Упрощенная проверка платежей Сатоши сказал:

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

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

Ответы (1)

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

Чтобы гарантировать, что транзакции в блоке фиксируются хэшем блока.

Хэш блока на самом деле не является хешем всего блока, это хеш заголовка блока. Если бы не было корня merkle, заголовок блока не содержал бы ничего, что гарантировало бы, что транзакции, являющиеся частью блока, действительно являются частью блока. Путем хэширования всех транзакций вместе в корень merkle и помещения его в заголовок блока полученные блоки должны содержать все свои транзакции, чтобы заголовок блока был действительным.

Да, ты прав. Но как это экономит место? удаляются ли транзакции, и мы оставляем только хэш дерева Меркла? если да, то как мы можем проверить транзакцию, используя только хэш дерева Меркла? если нет, блок всегда отправляется с транзакциями?
Корень merkle не используется для экономии места в блочной ретрансляции. Нода должна иметь блок полностью, чтобы проверить его. Традиционно это означает, что блок отправляется полностью. Корень merkle не позволяет не передавать транзакции блоков. Обратите внимание, что компактные блоки позволяют ретранслировать блоки без отправки полного блока, поскольку он отправляет информацию, необходимую узлу для полной реконструкции блока. В этом разделе в документе о биткойнах просто говорится, что весь блок не нужно хранить полностью, поэтому его можно использовать для экономии места на диске.
Обратите внимание, что метод экономии места на диске, описанный в статье о биткойнах, на самом деле не используется. Текущие методы обрезки гораздо более эффективны и позволяют полностью удалить блок с диска.