区块链是当下的一个热门词汇,对于区块链技术你有了解多少呢?或许你知道区块链技术其实就是分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。它是如何实现的呢?那么我们就要谈到区块链技术的数据结构啦。
开始谈区块链技术之前,我们要了解一个计算机数据结构的基础知识——哈希指针。在计算机语言中指针的意思是某个数据的地址。哈希指针是某数据的地址及该数据哈希值的结合。在《基于默克尔树的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) 版本号:生成该交易所用的比特币协议版本;
领取专属 10元无门槛券
私享最新 技术干货