Как/где хранится сопоставление транзакции с конкретным блоком?

Согласно официальному документу Биткойн, блок содержит поля «Предыдущий хэш», «Ононс» и «Корневой хэш». Корневой хеш — это корневой узел дерева меркле всех транзакций, которые были подтверждены в этом конкретном блоке.

Я прочитал в пятом абзаце верхнего ответа о том, что такое корень Меркла? :

Если у нас есть транзакция, которая утверждает, что она была из блока № 234133, мы можем получить транзакции для этого блока, проверить дерево Меркла и узнать, что транзакция действительна.

Скажем, блок bгде-то в цепочке блоков содержит tтранзакции. Где и как хранится сопоставление определенного набора транзакций с конкретным блоком? Потому что сам блокчейн содержит только корневой хэш всех транзакций для экономии места. Итак, есть ли другие скрытые компоненты, которые не были опубликованы в официальном документе, и есть ли ресурсы, чтобы получить полное представление о них?

Спасибо.

Технический документ — это не что иное, как заявление о том, как спроектирована система, это в лучшем случае обзор концепций. Фактическая реализация даже не строго следует тому, что сказано, и вы не должны ожидать этого от 9-страничного документа.

Ответы (3)

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

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

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

Блокчейн: преобразование блока в транзакцию

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

Конкретные интересы: преобразование транзакции в блок.

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

Bitcoin Core будет хранить полный индекс транзакций, если он настроен с индексом запуска -tindex=1.

Набор UTXO: вывод в сопоставление транзакции/блока

Полные узлы ведут учет всех средств Биткойн в виде набора неизрасходованных транзакций (UTXO). UTXO однозначно идентифицируются через свои выходные точки ([txid:vout]), что означает, что они по своей сути ссылаются на соответствующую транзакцию. Объект UTXO, как правило, также должен включать прямую или косвенную ссылку на блок, подтверждающий транзакцию, создавшую UTXO.

Исследователи

Исследователи обычно хранят более полные базы данных транзакций, блоков, адресов и UTXO.

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

1-В общем, если бы пользователь А сказал «n Btc» в качестве UTXO, который изменился на «n' Btc» после транзакции X в блоке B; затем вы хотите подтвердить расходы UTXO «n» (проверив доказательство/свидетель Меркла) и создание UTXO «n» в блоке B.

2- Или как пользователь, без какого-либо кодирования, вы можете перейти на один из этих сайтов https://m.btc.com/ https://www.blockchain.com https://blockchair.com

- либо начинать с блока # (если в блоке, скажем, более 1000 TX, будет сложно проверить таким образом) ex. На этих фотографиях показано, как я проверил, что UTXO coinbase блока 100 000 был потрачен в блоке 266 668.введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

-или по заданному адресу пользователя, вы получаете что-то вроде этого. Затем вы ищете значение UTXO в данном TX (независимо от того, было ли оно введено или выведено по направлению стрелки и цвету, как вы видите здесь). Когда вы нажимаете на него, введите описание изображения здесьвведите описание изображения здесьоно доставит вас к созданному TX с блоком no & all info; скажем, я нажал на ссылку выше, я получаю детали транзакции и номер блокавведите описание изображения здесь

(Да, это, вероятно, адреса кошелька, но, возможно, было бы проще проверить, поскольку существует хронологический порядок, в то время как внутри одного блока вы не знаете, каков индекс/относительный порядок вашего TX; я имею в виду, что вы не сказали, что это дано )

3 - Если вы спрашиваете как разработчик, я думаю, что этот основной код Биткойн расскажет вам, как на самом деле хранятся вещи найти это "случайно" вчера при проверке этого https://github.com/mit-dci/utreexo/issues/277

Надеюсь, это поможет...