Сомнения относительно хэш-функции в деревьях Меркла

Из того, что я читал, скажем, в блоке 4 транзакции. Хэш-значения транзакций A и B объединяются для получения хэш-значения AB. То же самое касается транзакций C и D для получения хэша CD. Позже AB и CD объединяются вместе, чтобы получить предпоследний хэш, который вместе с одноразовым номером дает окончательный хэш. Эта древовидная структура Меркла предназначена для того, чтобы можно было вернуться к корням (то есть к первоначальным транзакциям), чтобы проверить их, верно?

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

Ответы (1)

объединяются вместе, чтобы получить предпоследний хэш, который вместе с одноразовым номером

Это неправильно. «Предпоследний хеш» — это корень Меркла. Nonce вообще не является частью корня merkle. Это часть заголовка блока, которая хешируется вместе с корнем merkle и некоторыми другими вещами, чтобы получить хэш блока.

Эта древовидная структура Меркла предназначена для того, чтобы можно было вернуться к корням (то есть к первоначальным транзакциям), чтобы проверить их, верно?

Нет. Предусмотрено зафиксировать все транзакции в блоке и разрешить кому-либо доказать, что конкретная транзакция находится в этом блоке.

Если это так, то как дерево Меркла позволяет вернуться назад и проверить транзакции?

Это не так. Учитывая транзакцию, вы не можете определить, является ли она частью дерева Меркла, не зная хэшей других ветвей дерева. Цель состоит не в том, чтобы самостоятельно определить, находится ли транзакция в дереве меркла, а в том, чтобы позволить кому-то другому доказать, что транзакция находится в дереве меркла, предоставив ему хэши всех других ветвей дерева. в пути к корню.

В вашем примере с 4 транзакциями, если вы хотите доказать, что C является частью дерева Меркла, вы должны предоставить C, хэш D и хэш AB. Верификатор будет хешировать C, хешировать его с хешем D, чтобы получить CD, и хэшировать его с AB, чтобы получить корень. Затем они проверяли, совпадает ли вычисленный корень с корнем в заголовке блока. Таким образом, узел может доказать клиенту SPV, что транзакция была включена в блокчейн.