技术向!深入浅的告诉你比特币区块链的数据结构!

区块链是当下的一个热门词汇,可是你真的了解区块链的结构吗?今天比特猫就和大家一起探讨一下比特币的区块链数据结构。

先补充点儿基础知识:哈希指针。在计算机语言中指针的意思是某个数据的地址。哈希指针是某数据的地址及该数据哈希值的结合。在《基于默克尔树的SPV证明》一文中比特猫已经简单聊过区块链的链式结构,即新产生的区块中包含一项哈希指针指向前一个区块。区块链的第一个区块是创世区块。正是因为哈希指针的使用确保了比特币的防篡改特性。这是因为假设第K个区块被篡改,那么用第K个区块数据生成的哈希值就不能和第K+1个区块记录的哈希值匹配。

技术向!深入浅的告诉你比特币区块链的数据结构!

一个完整的区块包含以下数据:

(1)神奇数:神奇数为0xD9B4BEF9,这是一个固定值,作为区块之间的分隔符;

(2)区块大小:该字段之后的区块的大小,单位为字节;

(3)区块头:包含版本号、前一个区块的哈希指针、默克尔树根、时间戳、工作量证明的目标特征值、Nonce;

(4)交易个数:记录了当前区块的交易个数;

(5)交易记录。

神奇数、区块大小、交易个数的概念都比较好理解,重点聊一聊区块头的各项数据和交易记录的各项数据。

区块头包含以下数据:

(1)版本号:生成该区块所用的比特币协议版本;

(2)前一个区块的哈希指针:当前区块通过保存前一个区块的哈希指针指向前一个区块,前一个区块指向更前一个区块,这样便形成了一个链式结构,这也是区块链的由来;

(3)默克尔树根:在《基于默克尔树的SPV证明》一文中比特猫聊过默克尔树,在此不再赘述,注意的一点是默克尔树的叶子节点和交易记录是一一有序对应的;

(4)时间戳:比特币的时间戳是Unix时间戳,即从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒;

(5)工作量证明的目标特征值:由于比特币的挖矿难度是动态调整的,该数据正是用于调整挖矿难度的;

(6)Nonce:运行比特币挖矿程序的矿机不断对区块进行hash运算,如果生成的hash值不是以规定个数的0开头,则增加Nonce值,继续运算hash值。即Nonce是一个挖矿特征数据。

一条完整的交易记录包含以下数据:

(1)交易生成时间;

(2)交易的hash指针:指向该交易所花费的比特币所在交易的哈希指针;

(3)交易记录索引编号:本次交易的索引编号;

(4)交易输入地址:记录本次交易输出比特币的地址;

(5)交易输出地址:记录本次交易接收比特币的地址;

(6)输入地址数量;

(7)输出地址数量;

(8)数字签名;

(9)版本号:生成该交易所用的比特币协议版本;


分享到:


相關文章: