行业资讯

帮助中心 >  产品文档 >  架构 >  区块链基础架构之数据层(上)

一般来说,区块链系统由自下而上的数据层、网络层、共识层、激励层、合约层和应用层组成,基本架构如图所示,该模型中,基时间戳的链式区块结构、分布式节点的共识机制、基于共识机制的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点,其中数据层、网络层和共识层是构建区块链应用的必要元素,否则将不能称为真正意义上的区块链。而激励层、合约层和应用层则不是每个区块链应用的要素,有部分的区块链应用并不完整地包含着这些层结构。


区块链基础架构之数据层1.webp.jpg


数据层:

数据层是区块链的核心部分,区块链技术本质上是一种数据库技术和分布式账本,是由包含交易信息的区块从后向前有序连接起来的一种数据结构。数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法,这是整个区块链技术中最底层的数据机构,其中大多数技术都已被发明数十年,并在计算机领域使用了很久,无须担心其中的安全性,因为如果这些技术出现安全性上的巨大漏洞,则意味着全球金融技术都会出现严重的问题。该层涉及的技术主要包括:区块结构、 Merkle树、非对称加密、时间戳、数字签名和哈希函数等。

区块结构

在区块链网络中,所有的数据都以区块的形式被永久记录,而每个区块又以单独的文件保存在各个节点本地磁盘上。区块结构如图所示,由区块头和区块体两部分组成。一个区块由三类元数据组成,一类是引用前一区块的哈希值数据,用于与其进行连接;类包括难度值、时间戳和随机数,与工作量证明算法(挖矿竞争)相关;还有一类是 Merkle根,区块体中 Merkle树的根节点。部分数据项列表如图所示,包括被称为“魔法数”的常数0xD9B4BEF9、区块大小、区块头、区块所包含的交易数量及部分或所有的近期新交易等。


区块链基础架构之数据层2.webp.jpg

区块数据项列表


区块头封装了当前版本号、前一区块哈希值、时间戳、随机数、当前区块的目标哈希值、 Merkle树的根值等信息,以比特币为例,区块头是80字节,包括 PrevBlock、 MerkleRoot、 Nonce、 TimeStamp、Bits等字段,如图所示


区块链基础架构之数据层3.webp.jpg

区块头结构描述


区块体中则主要包含此区块中所有的交易信息。区块体中的 Merkle树将会对每一笔交易进行数字签名,确保每一笔交易都不可伪造且没有重复交易。所有交易将通过 Merkle树的Hash过程产生一个唯一的 Merkle根值记入区块头。

每一个区块对应着两个值来识别区块:区块头哈希值和区块高度。每一个区块都会有一个区块头哈希值,这是一个通过SHA256算法对区块头进行二次哈希计算而得到的32字节的数字指纹。例如,比特币的第一个区块的头哈希值0019d6689085ae16583le934ff763ae46a2a6c72b3fb60a8ce26f区块头哈希值可以唯一标识区块链上的区块,并且任何节点通过对区块头进行简单的哈希计算都可以得到该区块头的哈希值区块头哈希也包含在区块的整体数据结构中,但是区块头的数据和区块体的数据并不一定一起存储,为了检索效率起见,在实现中可以将二者分开存储。除了通过头哈希值来识别区块,还可以通过区块高度来对区块进行识别。与头哈希值不同的是,区块高度并不能唯一地标识一个区块。由于区块链存在着分叉情况,所以可能存在2个或2个以上区块的区块高度相等。


区块链基础架构之数据层4.webp.jpg

区块结构


 PrevBlock:每一个区块都有一个名字,即区块ID,区块ID=SHA256(区块头信息),而 PrevBlock 就是当前区块的上一个区块的ID,即当前区块的产生是基于上一个区块的ID建立的。显然,对于当前区块而言, PrevBlock是已知的。

 MerkleRoot:Merkle树是一种哈希二叉树,使用它可以快速校验大规模数据的完整性。在比特币网络中,使用Merkle Tree这种算法和数据结构,将当前区块所有交易记录最终压缩和归纳成一个统一的哈希值,即 Merkle根值(Merkle Root)。这个计算过程详见 Merkle树相关内容,显然Merkle Root根据已知的交易记录可轻易得到,并且结果明确,区块体中任何一笔交易记录的改变都会使得区块头中的 MerkleRoot发生翻天覆地的改变。 

Difficulty&bits:难度( Difficulty)是对实现某给定目标难易程度的量化表征,比如说掷骰子,可以规定掷到小于等于数字6的难度为1,显然这几乎是没有任何难度的,100%会掷到一个数字满足这个条件;掷到小于等于3的难度就是4,小于等于1的难度则是6。比特币协议中也有类似的规则,首先定义了一个64位的十六进制常数,在当时全网算力的条件下,10分钟左右的哈希运算会找到一个数字小于等于这个整数。作为比特币的缔造者,规定了那个时间点、全网拥有的算力找到那个数字的难度是1;后续以此为标准,根据变化中的全网算力,动态调整一个与之匹配且成正比的 Difficulty难度值,来尽可能保证全网10分钟运算找到符合要求的数字。调整的周期约每两周一次,即每2016个区块被挖出来之后就调整一次 Difficulty值。

Bits:是 Difficulty与对应的另外一种数据表现形式两者本质上具有相同含义。因此,当全网算力已知, Difficulty和Bits即可由之确定。 

Nonce:从0到N,一个只使用一次的随机数,用于实现工作量证明算法。 

TimeStamp:当前区块产生的近似时间戳,在一个中心化的区块链世界里,这个时间戳是根据产生该区块节点相关联的其他节点的时间戳求平均后计算得到,不完全等同于国际标准。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: