Как получить хешированные значения братьев и сестер в доказательстве Меркла?

Доказательства Меркла — одна из основных причин, по которой люди приписывают Биткойну использование деревьев Меркла. Но я изо всех сил пытаюсь понять, как они работают на практике. Пожалуйста, объясните как теоретически, так и практически.

Учитывая, что Легкие узлы хранят только заголовки блоков, чтобы ограничить объем памяти, необходимый для их копий BlockChain, узлы не имеют доступа к транзакциям в блоке; по определению заголовка блока единственная информация, которую они имеют о транзакциях, — это Merkle Root.

Но Merkle Root недостаточно, чтобы доказать, что транзакция находится в блоке. Необходимы все значения братьев и сестер в Дереве Меркла. Откуда берутся эти значения, если они еще не сохранены?

Пример. У узла 1 есть блок в блокчейне с Merkle Root = H_ABC...P. Он хочет видеть, находится ли H_Kон в блоке. Для этого ему нужны значения H_L; H_IJK; H_MNOP; H_ABC..H. Где и как он их получает?

введите описание изображения здесь

Given that Nodes only store Block Headers to limit the storage needed for their copies of the BlockChainЭто неправильно. Узлы хранят весь блок.
Исправил вопрос, чтобы уточнитьLightweight Nodes
Они попросят полный узел

Ответы (1)

Но Merkle Root недостаточно, чтобы доказать, что транзакция находится в блоке. Необходимы все значения братьев и сестер в Дереве Меркла. Откуда берутся эти значения, если они еще не сохранены?

Любой полный узел, у которого есть полная копия блока, может построить доказательство меркла , которое доказывает, что запрошенный идентификатор транзакции (txid) подключается к корню меркла в заголовке блока. Вот анимированный рисунок, показывающий, как Bitcoin Core строит доказательство Меркла:

Для txid (H5) для транзакции 5 создается список хэшей, необходимых для создания доказательства плюс, а также список флагов, сообщающих программному обеспечению, оценивающему доказательство, на какой стороне каждой ветви будет найден хэш.

Облегченный клиент, оценивающий доказательство, использует эти флаги и хэши, чтобы доказать, что txid подключается к корню merkle следующим образом:

Для получения дополнительной информации вы можете прочитать о сообщении протокола одноранговой сети merkleblockв Справочнике разработчика BtcInformation.org , который включает эти иллюстрации.