Чтение сырой биткойн-транзакции

Я хочу понять структуру данных Биткойн. Поэтому я пытаюсь понять необработанную транзакцию в формате json. Когда я проверил документацию API blockchain.info , я увидел, что структура ввода определена для таких транзакций:

"prev_out":
{
    "hash":"a3e2bcc9a5f776112497a32b05f4b9e5b2405ed9",
    "value":"100000000",
    "tx_index":"12554260",
    "n":"2"
},
"script":"76a914641ad5051edd97029a003fe9efb29359fcee409d88ac"

Но когда я запрашиваю транзакцию из blockchain.info , она выглядит иначе:

"prev_out":
{
    "spent":true,
    "tx_index":8845778,
    "type":0,
    "addr":"1CfD77hupeUvFwBPxZ2fA8iyWmVwQY22oh",
    "value":10212000000,
    "n":1,
    "script":"76a9147fe34b97aeff4ab754770be5c8f12e2e95332fd488ac"
 }

Есть ли какой-либо документ, который четко объясняет эти поля данных?

Мои текущие чудеса:

  1. Что такое израсходованное поле?
  2. В запрошенной транзакции нет хеш-поля, я думаю, должно быть?
  3. Что такое поле типа?
  4. Какие поля подписаны? Подпись генерируется хешем каких полей?
Эй, чувак, не точный ответ, но вот видео, где описывается подобная схема транзакции.

Ответы (3)

Вы должны знать, что различные парсеры транзакций часто включают свои собственные поля, которые не включены напрямую в необработанную транзакцию. Например, «адрес» не будет найден в необработанной транзакции, но его можно вывести, просмотрев его. Я не уверен, к чему относятся поля «тип» и «n». Вы можете взглянуть на эти ссылки:

анализ транзакций

создать необработанный биткойн tx

погашение необработанного tx

Я не уверен в ваших вопросах 1, 3, это будет конкретно для API. Я не уверен, что вы имеете в виду в вопросе 2. Что касается вопроса 4, это зависит от типа транзакции (не-segwit или segwit) и типа подписи (sighash_all, sighash_none, sighash_single).

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

1.) Не знаю.

2.) Хэш транзакции появляется в конце списка; он также появляется в ссылке, которую вы предоставили.

3.) Еще один хороший вопрос. Я не знаю.

4.) Поля, которые подписаны, взяты из предыдущей транзакции, где, в основном, вся структура данных подписана, за исключением того, что поле «scriptSig» заполнено сценарием «pubkey».

Существует три отличных источника документации по структурам транзакций:

1.) Руководство разработчика Bitcoin.org

2.) «Овладение биткойнами» Андреаса Антонопулоса.

3.) Сложный путь биткойнов: использование необработанного протокола биткойнов

Я надеюсь, что это было полезно.

Спасибо за ответ. Я посмотрю ссылку, используя необработанный bltcoin. Хэш, который вы упомянули в вопросе 2, является хешем всей транзакции. Но я ищу хэш хэша входной транзакции. Он появляется в документации, но не существует в реальной транзакции json.
Я понимаю. Хэш, который вы ищете, не отображается в tx. Это мой ответ 3, и это действительно «сложная» часть. Создается первоначальная транзакция с входами и выходами, а выходной сценарий помещается в область сигскрипта. Затем вся эта структура хешируется и подписывается. Затем выходной скрипт удаляется, а подпись помещается туда (и настраиваются поля длины). Довольно сложно в начале, но затем с «биткойнами на трудном пути» довольно легко разобраться. Также с книгой Андреаса...

Я думаю, что «потрачено» говорит вам, является ли это UTXO или нет.

https://en.wikipedia.org/wiki/Unspent_transaction_output