We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
有关交易的详细信息可以查看比特币的wiki网站:Transaction
TxBinaryMap: 原始图片地址
交易的结构表格(Transaction):
以一个正式网络的一笔交易为例分析:ac89b280cc21854b82b4cc111a0e6c0d10315117b6001e3f4f3af3d2f7b2fd53
通过blockcypher的API接口可以拿到更加详细的JSON数据
这笔交易的JSON返回数据:
{ "block_hash": "0000000000000000011edeab34b5145125efa596fbc2e6a88825acd9570aa4d8", "block_height": 423431, "block_index": 927, "hash": "ac89b280cc21854b82b4cc111a0e6c0d10315117b6001e3f4f3af3d2f7b2fd53", "hex": "0100000001f744bec7dd6c33cf384c8a4cb33269ca48c940e5852410d395807f6e56f6734301000000fd5e0100483045022100bd16b2ffa112937856716909162c00a66e7c5e6cccd0093ec9aece127632f8dc02205a567c53161e5fb62ac8d202acf8f8cc2f5a6496f47a878555dae7ffde85a41d01483045022100ac3c0365e103d97d3cc935755d5177e8f383993a558998200f8537e64f6b520002202216716f7fa54adc69095c4127ff6f97d42e28517a103f7691808db3cde6ee5b014cc9524104a7ada7c84ae36e98735597ee770a7cfd2d5d9398154b088ee352d3a83b21bbf537c0b8e4ea0acc172285b37571a9b1e36c0da387d6d1f361f0b65cad5c3f659e4104fe411f77e5aa50b54e0f2be0204b26cd1d2bf77bf95f2108a6b012e34637289121cd351c696c8a519b4b58674a87e7907385b4a5e7c0cfa5019346c1b04040914104eeffa9bbfe6dd2c99a9747ca5d1c1ebd15fe0344f52ff2915e3c11b3be9be11236895e5514b085c1f8a1bd8ef9c3db0cf1095aaf442cae11d88c3af026fabd1653aeffffffff0100090000000000001976a914921a4c141746bbd7beb8e81b05ba93d84b076a0088ac00000000", "addresses": [ "1EKXAAiJDntbEK3WSVW3vTcwYJ5ciJ5kSL", "38bPsA6ZXfRuxFD7efVXTkQd69422uzD4B" ], "total": 2304, "fees": 2304, "size": 437, "preference": "low", "relayed_by": "124.205.119.164", "confirmed": "2016-08-03T06:18:06Z", "received": "2016-08-03T03:26:33.685Z", "ver": 1, "double_spend": false, "vin_sz": 1, "vout_sz": 1, "confirmations": 100505, "confidence": 1, "inputs": [ { "prev_hash": "4373f6566e7f8095d3102485e540c948ca6932b34c8a4c38cf336cddc7be44f7", "output_index": 1, "script": "00483045022100bd16b2ffa112937856716909162c00a66e7c5e6cccd0093ec9aece127632f8dc02205a567c53161e5fb62ac8d202acf8f8cc2f5a6496f47a878555dae7ffde85a41d01483045022100ac3c0365e103d97d3cc935755d5177e8f383993a558998200f8537e64f6b520002202216716f7fa54adc69095c4127ff6f97d42e28517a103f7691808db3cde6ee5b014cc9524104a7ada7c84ae36e98735597ee770a7cfd2d5d9398154b088ee352d3a83b21bbf537c0b8e4ea0acc172285b37571a9b1e36c0da387d6d1f361f0b65cad5c3f659e4104fe411f77e5aa50b54e0f2be0204b26cd1d2bf77bf95f2108a6b012e34637289121cd351c696c8a519b4b58674a87e7907385b4a5e7c0cfa5019346c1b04040914104eeffa9bbfe6dd2c99a9747ca5d1c1ebd15fe0344f52ff2915e3c11b3be9be11236895e5514b085c1f8a1bd8ef9c3db0cf1095aaf442cae11d88c3af026fabd1653ae", "output_value": 4608, "sequence": 4294967295, "addresses": [ "38bPsA6ZXfRuxFD7efVXTkQd69422uzD4B" ], "script_type": "pay-to-script-hash", "age": 423147 } ], "outputs": [ { "value": 2304, "script": "76a914921a4c141746bbd7beb8e81b05ba93d84b076a0088ac", "addresses": [ "1EKXAAiJDntbEK3WSVW3vTcwYJ5ciJ5kSL" ], "script_type": "pay-to-pubkey-hash" } ] }
接口数据中的hex字段是发送到区块链上的交易原文,接下来主要分析这一段数据。
01000000 // Version,4字节 01 // 交易输入个数,变长VarInt f744bec7dd6c33cf384c8a4cb33269ca48c940e5852410d395807f6e56f67343 // UTXO(Unspent Transaction Output),32字节 01000000 // UTXO的index,4字节 fd5e01 // 解锁脚本长度,VarInt,变长 00483045022100bd16b2ffa112937856716909162c00a66e7c5e6cccd0093ec9aece127632f8dc02205a567c53161e5fb62ac8d202acf8f8cc2f5a6496f47a878555dae7ffde85a41d01483045022100ac3c0365e103d97d3cc935755d5177e8f383993a558998200f8537e64f6b520002202216716f7fa54adc69095c4127ff6f97d42e28517a103f7691808db3cde6ee5b014cc9524104a7ada7c84ae36e98735597ee770a7cfd2d5d9398154b088ee352d3a83b21bbf537c0b8e4ea0acc172285b37571a9b1e36c0da387d6d1f361f0b65cad5c3f659e4104fe411f77e5aa50b54e0f2be0204b26cd1d2bf77bf95f2108a6b012e34637289121cd351c696c8a519b4b58674a87e7907385b4a5e7c0cfa5019346c1b04040914104eeffa9bbfe6dd2c99a9747ca5d1c1ebd15fe0344f52ff2915e3c11b3be9be11236895e5514b085c1f8a1bd8ef9c3db0cf1095aaf442cae11d88c3af026fabd1653ae // 解锁脚本,变长 ffffffff // 交易序列号,4字节 01 // 交易输出个数,变长VarInt* 0009000000000000 // 输出金额,8字节 19 // 锁定脚本长度,VarInt,变长 76a914921a4c141746bbd7beb8e81b05ba93d84b076a0088ac // 锁定脚本,变长 00000000 // Time Lock,4字节
下面进行说明:
比特币中很多数据都是小端编码的,除了交易输入脚本和交易输出脚本,其余内容全部是小端编码的。这个在第一张图片TxBinaryMap左下角的字可以看出来。
可以看到比特币交易数据最外层的结构包括:Version,交易输入个数,交易输入,交易输出个数,交易输出,TimeLock。
示例图:
一个完整的交易中,交易输入和输出可以为多个。
但是只有这个结构是不能解析整个交易的,因为交易输入的长度和交易输出的长度是变长的,还需要解析交易输入和交易输出的长度。
交易输入的结构图:
交易输出的结构图:
有了基本的结构图,基本可以解析了。
但是在交易输入和交易输出的结构图中,都提到了一个VarInt的变长参数,需要这个变长参数的规则才能知道后续脚本的长度。
VarInt变长 VarInt的长度规则为:
假设脚本长度定义为len 如果0 < len < 0xFD,那么脚本长度就是一个字节的len 如果0xFD <= len <= 0xFFFF,脚本长度为:0xFD + len转换为两个字节bytes以后倒序 如果0xFFFF < len <= 0xFFFF FFFF,脚本长度为:0xFE + len转换为四个字节bytes后倒序 如果0xFFFF FFFF < len,脚本长度为:0xFF + len转换为八个字节bytes后倒序 例子: (1) len=200(0xC8),那么脚本的长度为:0xC8 (2) len=40000(0x9C40),那么脚本的长度为:0xFD,0x40,0x9C (3) len=100000(0x186A0),那么脚本的长度为:0xFE,0xA0,0x86,0x01,0x00 (4) len=5000000000(0x12A05F200),那么脚本的长度为:0xFF,0x00,0xF2,0x05,0x2A,0x01,0x00,0x00,0x00
假设脚本长度定义为len 如果0 < len < 0xFD,那么脚本长度就是一个字节的len 如果0xFD <= len <= 0xFFFF,脚本长度为:0xFD + len转换为两个字节bytes以后倒序 如果0xFFFF < len <= 0xFFFF FFFF,脚本长度为:0xFE + len转换为四个字节bytes后倒序 如果0xFFFF FFFF < len,脚本长度为:0xFF + len转换为八个字节bytes后倒序
例子: (1) len=200(0xC8),那么脚本的长度为:0xC8 (2) len=40000(0x9C40),那么脚本的长度为:0xFD,0x40,0x9C (3) len=100000(0x186A0),那么脚本的长度为:0xFE,0xA0,0x86,0x01,0x00 (4) len=5000000000(0x12A05F200),那么脚本的长度为:0xFF,0x00,0xF2,0x05,0x2A,0x01,0x00,0x00,0x00
比如上面的解锁脚本开头为0xfd,0xfd表示后续两个字节0x5e01表示长度,那么脚本的实际长度是0x15e,注意后面的长度是小端编码的。
有了上面的东西,就可以解析比特币交易的原始数据了。
01000000 // version,4字节,小端编码
交易的版本号在比特币中是固定的值1,填充为4个字节数据并倒序即为hex中的版本号。
f744bec7dd6c33cf384c8a4cb33269ca48c940e5852410d395807f6e56f67343// UTXO(Unspent Transaction Output,未花费的交易输出),小端编码
输入交易的HASH是交易输入中的一项,实际填充时是倒序的,上面的输入正序排列以后为4373f6566e7f8095d3102485e540c948ca6932b34c8a4c38cf336cddc7be44f7,可以在blockcypher网站上查询到这笔交易的详细信息,网页展示和api调用的JSON数据
4373f6566e7f8095d3102485e540c948ca6932b34c8a4c38cf336cddc7be44f7
ffffffff // sequence,序列号
交易序列号为4个字节数据,一般都填写0xffffffff。
附上精通比特币中对sequence的描述:
00000000 // lock time,时间戳
交易锁定时间,4字节,默认情况下为全0,表示立刻可以消费掉。
附上精通比特币里面关于锁定时间的描述:
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Uh oh!
There was an error while loading. Please reload this page.
交易数据结构
有关交易的详细信息可以查看比特币的wiki网站:Transaction
TxBinaryMap:

原始图片地址
交易的结构表格(Transaction):

示例数据
以一个正式网络的一笔交易为例分析:ac89b280cc21854b82b4cc111a0e6c0d10315117b6001e3f4f3af3d2f7b2fd53
通过blockcypher的API接口可以拿到更加详细的JSON数据
这笔交易的JSON返回数据:
接口数据中的hex字段是发送到区块链上的交易原文,接下来主要分析这一段数据。
先看解析结果
下面进行说明:
Lettle-endian 小端编码
比特币中很多数据都是小端编码的,除了交易输入脚本和交易输出脚本,其余内容全部是小端编码的。这个在第一张图片TxBinaryMap左下角的字可以看出来。
比特币交易的数据结构
可以看到比特币交易数据最外层的结构包括:Version,交易输入个数,交易输入,交易输出个数,交易输出,TimeLock。
示例图:

一个完整的交易中,交易输入和输出可以为多个。
但是只有这个结构是不能解析整个交易的,因为交易输入的长度和交易输出的长度是变长的,还需要解析交易输入和交易输出的长度。
交易输入的结构图:

交易输出的结构图:

有了基本的结构图,基本可以解析了。
但是在交易输入和交易输出的结构图中,都提到了一个VarInt的变长参数,需要这个变长参数的规则才能知道后续脚本的长度。
VarInt变长
VarInt的长度规则为:
比如上面的解锁脚本开头为0xfd,0xfd表示后续两个字节0x5e01表示长度,那么脚本的实际长度是0x15e,注意后面的长度是小端编码的。
有了上面的东西,就可以解析比特币交易的原始数据了。
比特币各项数据的说明
Version
交易的版本号在比特币中是固定的值1,填充为4个字节数据并倒序即为hex中的版本号。
UTXO
输入交易的HASH是交易输入中的一项,实际填充时是倒序的,上面的输入正序排列以后为
4373f6566e7f8095d3102485e540c948ca6932b34c8a4c38cf336cddc7be44f7
,可以在blockcypher网站上查询到这笔交易的详细信息,网页展示和api调用的JSON数据交易序列号sequence
交易序列号为4个字节数据,一般都填写0xffffffff。
附上精通比特币中对sequence的描述:
lock time
交易锁定时间,4字节,默认情况下为全0,表示立刻可以消费掉。
附上精通比特币里面关于锁定时间的描述:
The text was updated successfully, but these errors were encountered: