需要帮助理解比特币原始交易

need help understanding bitcoin raw transaction

我正在尝试编写一些 python 代码来消化比特币 rawTX,但我几乎停留在第二步。

我到处都看到它说版本有一个 4 字节字段,然后是 tx 输入数量的 varint。

BIP69 说可以有版本 2,但我看不到任何以任何方式扩展或更改字段大小的内容,因为它想保持向后兼容性。然而,我的示例是 tx 版本 1.

tx input的数字不能是0x00,只能大于1字节,以0xfd 0xfe 0xff开头。

作为一个例子,我有这个非 Coinbase rawtx,它有 2 个输入和来自地址的大量输出 111qT5kHBkZ2q96iUxTY4DGUW2APSmCnz

交易ID txid: 9ea0df029f138e92f50379df6fde0ade9cf101cb8c975825c74188305cac6eed

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

如果我没记错的话,如果我在上面的 link 中按下 RAW TX link,那么原始交易就是末尾的“tx_hex”字段

开头是: 0100000000010264066fbd45afd2cedaf3638a9886f80c863e6fe083c797ac0c64c93998a7b10ffd03000023220020bdd68a4cff85348e9300087f455fbad025c1e7fb54bdbf17a8c044876309069dffffffff9cf4f90ec1d0c0eae485724c4dce55e4278a1f78016d224531552c20bb94f74c0000000023220020bdd68a4cff85348e9300087f455fbad025c1e7fb54bdbf17a8c044876309069dfffffffffd4f0544620000..................

即使我从 ffffffff 向后解释这个,我也会得到:

01000000 -> 4 字节版本

00010264 -> ????????????这怎么能从 0x00 开始呢?我看到的第一个 02 是下行的两个字节,然后是 0x64 是什么?

066fbd45afd2cedaf3638a9886f80c863e6fe083c797ac0c64c93998a7b10ffd -> 根据 https://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx

兑换的输入的 32 字节散列

03000023 -> 输出索引

22 -> varint 1 字节用于脚本长度

0020bdd68a4cff85348e9300087f455fbad025c1e7fb54bdbf17a8c044876309069d -> 长度为 0x22 的脚本

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

我显然遗漏了一些信息..至少有人可以指出我的想法或者告诉我我的想法哪里出了问题吗?

这是一个 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