Какая информация содержится в транзакции?

Согласно информации, которую я нашел здесь: https://en.bitcoin.it/wiki/Transaction , транзакция биткойнов содержит,

ДЛЯ КАЖДОГО ВХОДА:

  • Хэш входящей транзакции
  • ScriptSig

ДЛЯ КАЖДОГО ВЫХОДА:

  • Ценить
  • ScriptPubKey

Теперь мой вопрос: какая информация неявно содержится в ScriptSig? Я знаю, что из ScriptPubKey можно вычислить адрес назначения, но я не вижу, можно ли получить какую-либо другую информацию из ScriptSig.

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

Ваш последний абзац - это отдельный вопрос, и его следует выделить в отдельный пост. Но это уже обсуждалось, например, на bitcoin.stackexchange.com/questions/13731/… (см. также комментарии к ответу). Полный узел уже проиндексировал все транзакции в цепочке блоков по их хешу (txid), поэтому он может найти любую данную транзакцию без повторного сканирования всей цепочки.
спасибо @NateEldredge. есть ли спецификация того, как делается это индексирование?
Это деталь реализации программного обеспечения клиента узла. Для Bitcoin Core вы можете увидеть en.bitcoin.it/wiki/…
значит, когда полный узел индексирует блокчейн, он также вычисляет хэш каждой транзакции?
Да, это правильно.

Ответы (1)

Какие данные есть в scriptSig

scriptSigв типичном сценарии p2pkh , который является практическим большинством биткойн-транзакций, содержит только открытый ключ scriptPubKeyхэша, а также подпись. Это означает, что нет никаких метаданных, кроме открытого ключа и подписи для авторизации платежа.

Для не-p2pkh-транзакций, таких как, например , p2sh-транзакции , в файл scriptSig. Например, в p2sh multisig будут показаны несколько открытых ключей, способных авторизовать мультиподпись. В еще более сложных скриптах scriptSigможет раскрываться важная информация, в зависимости от того, что scriptPubKeyзапрашивает скрипт. Например, есть транзакции со снежинками, которые требуют scriptSigрешения определенных головоломок . Однако такие сделки очень редки.

Как проверяются транзакции

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

Подтверждение транзакции , с другой стороны, подтверждает, что транзакция была скрыта под определенным количеством доказательств работы, например, k = 6 блоков. Проверка статуса подтверждения транзакции не требует прохождения всех данных в блокчейне. Это требует только просмотра заголовков блокчейна. В модели безопасности SPV статус подтверждения транзакции проверяется просто путем проверки того, что она была включена в блок и скрыта под определенным количеством доказательств работы. Это делается быстро, не просматривая все данные блокчейна (а только все заголовки блокчейна), предоставляя доказательство включения, состоящее из родственных путей дерева Меркла .

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