Как именно история транзакций моделируется в блоках блокчейна?

Я понимаю, что каждый блок в цепочке биткойнов содержит список транзакций, но давайте предположим (ради этого вопроса), что рассматриваемый блок содержит только одну транзакцию и что эта конкретная транзакция имеет историю предыдущих транзакций ( т. е. это не была транзакция coinbase). Как мне выяснить, какой блок содержит предыдущую транзакцию (транзакции) этой одиночной транзакции? Я знаю, что каждая транзакция содержит хэш предыдущей транзакции, но как найти этот хэш, не просматривая каждый блок в блокчейне? Другими словами, как я могу быстро определить цепочку хэшей транзакции для заданного идентификатора транзакции? Буду признателен за любые ссылки на объяснения или предыдущие вопросы - я пытался искать и не нашел ничего, что удовлетворяло бы мой вопрос.

Спасибо.

Ответы (3)

— но как найти этот хеш, не просматривая каждый блок в блокчейне?

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

Это похоже на то, что делает Bitcoin Core. После полной проверки блока он добавляет созданные UTXO в отдельную базу данных. Эта база данных содержит сведения обо всех UTXO, поэтому в ней есть точка выхода каждой UTXO (txid + выходной индекс), выходное значение и выходной сценарий. Когда транзакция тратит UTXO, ее можно быстро найти с помощью точки выхода, указанной в транзакции, а затем UTXO удаляется из базы данных. Выходы этой транзакции затем добавляются в базу данных как новые UTXO.

"Ах-ха!" это все, что я могу сказать. :)

Когда узлы запускаются и синхронизируют блокчейн, они создают и поддерживают нечто, известное как utxoбаза данных. Он содержит все выходы транзакций, которые не были потрачены.

По мере того, как транслируются новые блоки, входные данные, потраченные на транзакции в этих блоках, удаляются из utxo, а новые созданные выходные данные добавляются. блокировать. Попытка передать дополнительный tx с теми же входными данными приведет к конфликту мемпула.

Эта база данных сохраняется на диск, поэтому закрытие и запуск узла не так интенсивны, как первая синхронизация и сканирование.

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

Бухгалтерская книга, т.е. цепочка блоков, хранится на каждом компьютере (узле), который участвует в сети. ... Цепочка блоков хранится на всех компьютерах, на которых работает биткойн-узел. На тысячах компьютеров работает полный узел. Каждый из этих узлов записывает каждую новую транзакцию в блокчейне.