Проверка того, что транзакция находится в блокчейне

Позвольте мне начать с того, что я только изучаю блокчейн и технические аспекты.

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

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

Заранее спасибо.

Ответы (2)

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

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

В свою очередь, если у вас есть только отправная txidточка, вы можете запросить полную транзакцию с любого узла, который знает об этом. Однако необработанная транзакция не включает информацию о том, в какой блок она была включена. AFAIU, чтобы получить это, вы должны сделать getDataзапрос MSG_MERKLEBLOCKтипа. Это не только даст вам полную транзакцию, но и партнеров по хешированию для формирования ветки Merkle вплоть до хэша блока и заголовка блока, что позволит вам полностью проверить включение транзакции в блокчейн.

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

Не совсем, для доказательства работы хешируется только заголовок блока. Заголовок блока состоит из: номера версии, хэша предыдущих блоков, корня меркла, метки времени, цели (сложности) и одноразового номера, используемого для поиска действительного блока.

Заголовок блока — это только одна часть блока, но каждый блок также содержит данные обо всех включенных в него транзакциях. Итак, чтобы ответить на ваш вопрос:

Я хотел вернуться к блоку X и посмотреть, какие транзакции в нем содержатся, как это возможно [...]?

Достаточно просто, вы просто вернетесь к этому блоку и посмотрите на данные транзакции в нем!

Если вам интересно, почему и как используется корень Меркла, у этого вопроса есть отличный ответ. Биткойн-вики также содержит некоторую соответствующую информацию :

[Транзакции] хэшируются только косвенно через корень Merkle. Поскольку транзакции не хэшируются напрямую, хеширование блока с 1 транзакцией требует точно таких же усилий, как хеширование блока с 10 000 транзакций.