нужна помощь в понимании необработанной транзакции биткойнов

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

Куда бы я ни посмотрел, там написано, что есть 4-байтовое поле для версии, а затем - вариант для количества входов tx.

BIP69 говорит, что может быть версия 2, но я не вижу там ничего, что расширяет или изменяет размеры полей каким-либо образом, так как он хочет сохранить обратную совместимость. Однако мой пример - tx версии 1.

Номер для входов tx не может быть 0x00 и может быть больше 1 байта, когда начинается с 0xfd 0xfe 0xff.

В качестве примера у меня есть rawtx, не относящийся к Coinbase, с 2 входами и МНОГО выходов с адреса 111qT5kHBkZ2q96iUxTY4DGUW2APSmCnz

идентификатор транзакции txid: 9ea0df029f138e92f50379df6fde0ade9cf101cb8c975825c74188305cac6eed

https://sochain.com/tx/BTC/9ea0df029f138e92f50379df6fde0ade9cf101cb8c975825c74188305cac6eed

и необработанная транзакция, которая, если я не ошибаюсь, является полем "tx_hex" в конце, если я нажимаю ссылку RAW TX в ссылке выше

она начинается с: 0100000000010264066fbd45afd2cedaf3638a9886f80c863e6fe083c797ac0c64c93998a7b10ffd03000023220020bdd68a4cff85348e9300087f455fbad025c1e7fb54bdbf17a8c044876309069dffffffff9cf4f90ec1d0c0eae485724c4dce55e4278a1f78016d224531552c20bb94f74c0000000023220020bdd68a4cff85348e9300087f455fbad025c1e7fb54bdbf17a8c044876309069dfffffffffd4f0544620000..................

Даже если я интерпретирую это в обратном направлении от ffffffff, я получаю:

01000000 -> 4-байтовая версия

00010264 ->???????????? как это может начинаться с 0x00? первый 02, который я вижу, это два байта вниз по строке, а затем что такое 0x64?

066fbd45afd2cedaf3638a9886f80c863e6fe083c797ac0c64c93998a7b10ffd -> 32-байтовый хэш ввода для погашения согласно https://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx

03000023 -> индекс вывода

22 -> varint 1 байт для длины скрипта

0020bdd68a4cff85348e9300087f455fbad025c1e7fb54bdbf17a8c044876309069d -> скрипт длиной 0x22

ffffffff 9cf4f90ec.............

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

1 ответ

Решение

Это транзакция segwit, поэтому за 4 байтами версии следуют маркер и байт флага.

Итак, для транзакции в вашем вопросе:

 01000000 - version
 00 - marker byte, always 0
 01 - flag byte
 02 - number of inputs, etc

Это указано в BIP0144, см. https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki

Другие вопросы по тегам