нужна помощь в понимании необработанной транзакции биткойнов
Я пытаюсь написать код на 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