酸饼博客
关注区块链技术应用与数字货币

区块链入门100问(15) :如何理解比特币系统中交易的数据结构?

比特币交易是比特币系统里最重要的部分,比特币系统中的其他部分,都是为了保证比特币交易可以被生成、能在比特币网络里得到传播和验证,并最终写入比特币区块链。

比特币交易数据以字节的形式保存在区块中。每个区块大约有4000条交易,每条交易都有一个txid作为在区块内的标识。不过txid并不一定是唯一的,比特币账本出现过同一个txid在两个不同的区块出现。

使用blockchian.com的api可以根据交易的txid查询该交易的原始数据,如:
https://blockchain.info/rawtx/0a79509678a9c04d6cf19a11b28ce6f40637ba8215e92f31aec3f3f9c4950903?format=hex

或者在比特币客户端用脚本获取:
bitcoin-cli getrawtransaction 0a79509678a9c04d6cf19a11b28ce6f40637ba8215e92f31aec3f3f9c4950903

会得到这个交易完整的原始数据:

020000000001019461747f9e3573dfa32976189b89df555ec04a2d0565f947b2670e556ddbcdfb00000000171600146e2bc15ad78077488d44c4f4abcaeb8ae38f5352feffffff02ad324b000000000017a914a90a870aea63e03ee2d922e37d4b8c9eeeac545087a65eea000000000017a9146a4480610ed331a0099b9dff5613927eb1d768f087024830450221008188be28d45cf9c03ce30688e8e8903719061e3e414b65aedb0dd527292b92ee02205ead4fd9b9f48d1c8bd6f68b3ef8bc51f7e13a25c5d70f8c4f7f7782cc1894bd0121025d82f2ab930481eaf554450075484d61575a2f56ac9045e539949cc38ac9d30a6c8c0800

原始的交易数据并不能直观地体现交易的具体内容,需要根据比特币交易的协议进行分析数据结构和解析数据。

一个完整的交易由以下的元素构成的:

version 交易的协议版本,4字节
Flag:可选字段,两个字节。如果出现,值总是0001,表示隔离见证。
Input Count:交易输入的数量,可变长度,1~9个字节。
tx_in:交易输入
Output Count:交易输出的数量,1~9个字节。
tx_out:交易输出
lock_time:锁定时间,4字节。
Witnesses:可选内容,伴随Flag出现,隔离见证的验证脚本;可变长度。

lock_time是一个多意字段,不同的取值范围对应不同的意义:
0:表示立即生效

= 500000000:含义为Unix时间戳,处于该时刻之前为锁定(不生效)

lock_time表示交易的锁定时间,也即是是被该交易被加到区块的最早时间;在大多数的情况下他的值都是0,表示需要立即被加入区块中。

在以上几个字段里面,其中交易输入和交易输出的数据结构比较复杂,后面再单独介绍,欢迎留意阅读。

按照比特币交易的数据结构进行解析,能够解析出交易的可读内容。内容太长,就不贴过来了,可看blockchain.com的api查询和比较:
https://blockchain.info/rawtx/0a79509678a9c04d6cf19a11b28ce6f40637ba8215e92f31aec3f3f9c4950903

掌握的比特币交易的数据结构,我们可以根据交易需求构建自己的比特币交易数据。

本文参考内容:
https://en.bitcoin.it/wiki/Transaction

未经允许不得转载:酸饼 » 区块链入门100问(15) :如何理解比特币系统中交易的数据结构?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留言联系关于酸饼