按照中本聪的设计,比特币系统是一个个的数据区块以链接的方式串起来的,区块就是系统的组成单元,区块的架构内容就是整个系统的核心部分。每一个区块都由两部分构成,一部分叫区块头,里面存储的是一些参数值,另一部分叫区块体,里面存储的是该区块的所有交易数据。
区块头部分很小,里面存储的参数值包括上一个区块的哈希值(32字节)、版本号(4字节)、难度值(4字节)、随机数(4字节)、时间戳(4字节)、梅克尔树根哈希值(32字节)这六个部分。虽然区块头全部只有80个字节,但却完成了系统的大部分功能,是名副其实的“头脑指挥官”。以下为六个部分的具体介绍:
一、上一个区块的哈希值(父区块哈希值):是指对排在它前面的那个区块的区块头进行哈希算法得出来的哈希值,这个值确保了两个区块之间的链接是正确的。新区块必须排在上一个区块的后面,对系统的安全运作起到重要作用。
二、版本号:指当前比特币系统的版本信息,类似于平时我们使用的软件升级版本号。
三、难度值:指生产该区块难度目标,该难度值会随着区块数量的增加和全网算力的提升或降低而调整,以保证系统可适应科技的发展,按照既定的频率时间生产区块。
四、随机数:一个用于证明工作量的计算参数,相当于彩票的中奖号码。任何想获得区块的记账权、赢得系统发放的比特币的人,都必须努力通过运行哈希计算去猜出这个随机数,只有第一个猜对的人,才能获得记账权和比特币奖励。
五、时间戳:指记录该区块生成的时间,保证区块按照时间顺序进行排列。
六、梅克尔树根:指区块体在梅克尔树结构下,所有交易通过不断地合并、哈希运算之后,最后得出的哈希值。
相比小小的区块头,区块体大约就有1MB左右(整个区块的大小就大约1MB),里面包含该区块10分钟内的所有交易信息,呈梅克尔树结构分布着。这个分布是倒立式的,通过两两合并和哈希运算,不断向上计算,最终的哈希值就放在区块头成为梅克尔树根。