Подтверждение транзакций в корне Merkle и SegWit

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

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

Кроме того, меня немного смущает Segregated Witness. Насколько я понимаю, подписи отделены от транзакций и подписи хешируются так же, как и транзакции. Этот окончательный хэш подписи либо хэшируется с окончательным хэшем транзакции для формирования корня Merkle, либо содержится как еще один корень Merkle в отдельном поле в блоке. Но если корень Merkle всегда одного размера (я полагаю), как это экономит место? Если корень Merkle всегда 256 бит, то какая разница, хешируются ли подписи вместе с транзакциями или хэшируются отдельно?

Я не могу найти четких ответов на свои вопросы, поэтому любая помощь будет оценена по достоинству.

Ответы (1)

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

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

Полные узлы уже имеют все данные и не нуждаются в их предоставлении.

Кроме того, меня немного смущает Segregated Witness. Насколько я понимаю, подписи отделены от транзакций и подписи хэшируются так же, как и транзакции. Этот окончательный хэш подписи либо хэшируется с окончательным хэшем транзакции для формирования корня Merkle, либо содержится как еще один корень Merkle в отдельном поле в блоке. Но если корень Merkle всегда одного размера (я полагаю), как это экономит место? Если корень Меркла всегда 256 бит,

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

какая разница, хешируются ли подписи вместе с транзакциями или хэшируются отдельно?

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