首页 > 如何解析比特币中的交易原始数据rawData

比特币交易参数,如何解析比特币中的交易原始数据rawData

互联网 2021-03-08 10:37:37
交易数据结构

有关交易的详细信息可以查看比特币的wiki网站:Transaction

TxBinaryMap:

txbinarymap原始图片地址

交易的结构表格(Transaction):

txf

示例数据

以一个正式网络的一笔交易为例分析: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 // 交易输入个数,变长VarIntf744bec7dd6c33cf384c8a4cb33269ca48c940e5852410d395807f6e56f67343 // 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字节

下面进行说明:

Lettle-endian 小端编码

比特币中很多数据都是小端编码的,除了交易输入脚本和交易输出脚本,其余内容全部是小端编码的。这个在第一张图片TxBinaryMap左下角的字可以看出来。

比特币交易的数据结构

可以看到比特币交易数据最外层的结构包括:Version,交易输入个数,交易输入,交易输出个数,交易输出,TimeLock。

示例图:

default

一个完整的交易中,交易输入和输出可以为多个。

但是只有这个结构是不能解析整个交易的,因为交易输入的长度和交易输出的长度是变长的,还需要解析交易输入和交易输出的长度。

交易输入的结构图:

交易输入结构

交易输出的结构图:

交易输出结构

有了基本的结构图,基本可以解析了。

但是在交易输入和交易输出的结构图中,都提到了一个VarInt的变长参数,需要这个变长参数的规则才能知道后续脚本的长度。

VarInt变长VarInt的长度规则为:

假设脚本长度定义为len如果0 < len < 0xFD,那么脚本长度就是一个字节的len如果0xFD

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读