区块链研究:区块链的结构(2)

2018/05/18 11:27

区块链


本篇将介绍区块链的结构和运作原理。

上一篇我们说到区块链是分布式的账本,那么这个账本是怎么工作的呢?首先我们需要了解下它的架构:简单地看,区块链共有三个层次:协议层、扩展层和应用层。

简单理解,还是用这个账本的比喻,协议层就是账本内容和账单,拓展层则是记账原则,应用层则是每个人的账户余额。有了账户,账单,记账方法,这一个体系就可以运转起来了。

但是账本毕竟太浅显了,这次我们换一个比喻,把区块链想象成一个电脑软件,那么协议层就是电脑的操作系统,拓展层是电脑的驱动程序,而应用层则是直接面向客户的APP、客户端。

(1)协议层

协议层就是指代最底层的技术,扮演的角色类似电脑的操作系统。协议层可以又细分成两个层次:存储层+网络层。

区块链研究:区块链的结构(2)
区块链的协议层

存储层:区块链数据

存储层其实就是数据层,也就是“账本上的内容”。从第一个区块开始,之后在同样规则下创建的规格相同的区块通过一个链式的结构依次相连组成一条主链条。随着整个区块链的不断运行,新的区块通过验证后会不断被添加到主链上,主链就会不断延长。

到这里我们会发现存储层最基本的结构单元就是区块,为了让大家更好地理解区块和其连接机制,我们需要先介绍三个概念:哈希算法,时间戳,和Merkle树结构。

  • 第一个概念是哈希算法,它是保证区块链里交易信息不被篡改的单向密码机制。这里涉及到密码学的知识,我们暂且略过,只需要知道:一段明文经过哈希算法处理后,将转化成为一段长度较短、位数固定的散列数据。这个加密过程是不可逆的,我们无法通过输出的散列数据倒推原本的明文是什么。同时,输出的散列数据和输入的明文是一一对应的,任何一个输入信息的变化都将使得输出的散列数据的变化。区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成一串随机散列数据,即能够唯一而准确标识一个区块的哈希值。区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化就意味着区块信息未被篡改。
  • 第二个概念是时间戳,顾名思义,时间戳就是给区块链里的每一个信息都标记了其发生时间,证明交易记录的真实性。任何人都无法篡改时间戳,区块链通过时间戳保证了每个区块依次顺序相连。
  • 第三个概念是Merkle树(默尔克树)结构,这是区块链中为了减少数据计算量的一个结构,如下图所示。
区块链研究:区块链的结构(2)
Merkle树结构

Merkle树的叶子节点存储数据信息的哈希值,树根节点存储的是对其下面所有叶子节点的组合进行哈希计算后得出的哈希值。区块中任意一个数据的变更都会导致Merkle树结构发生变化,Merkle树结构使得我们只需验证其统一生成的统一哈希值,大大减少了数据的计算量。

了解这三个概念以后我们再来看区块。区块由包含元数据的区块头和包含交易数据的区块主体构成。其中,区块头里包含的元数据有三组:

1、前面区块的哈希值,用于连接前面的区块。

2、挖矿难度、Nonce(随机数,用于工作量证明算法的计数器,下篇文章重点讲解)、时间戳;

3、能够总结并快速归纳校验区块中所有交易数据的Merkle树根数据。

区块链系统每隔一段时间会创建一个新的区块,其中包含了这段时间整个系统发生的所有交易,这些交易的信息通过哈希算法生成哈希值,这些哈希值通过Merkle树结构生成树根节点的哈希值,也就是这个区块的哈希值。新区块通过前一个区块的哈希值与前一个区块连接,这样形成一条完整的交易链条,如下图所示,这也就是整个存储层的构成。

区块链研究:区块链的结构(2)
存储层:区块链数据(图片来自网络)

网络层:区块链节点

网络层的本质则是一个点对点的网络,节点可以产生、接收信息,节点与节点之间通过维护一个共同的区块来保持通信。

区块链研究:区块链的结构(2)
网络层:区块链节点网络

区块链的网络中,节点和节点之间的通讯信息会记录在新的区块中,新区块创造后会以广播形式通知到其他节点,其他节点会对这个区块进行验证,当全区块链网络中有超过51%的用户通过了验证,这个新区块就会被加到主链上。

(2)扩展层

扩展层扮演的角色类似电脑的驱动程序,这个层次使得区块链的产品更加实用。扩展层里包括了共识层、激励层与合约层。

区块链研究:区块链的结构(2)
区块链的拓展层
  • 首先是共识层,区块链网络中,各个节点高度分散化,能否高效地针对区块数据的有效性达成共识非常关键。为了确保信息的准确性和有效性,区块与区块之间需要有一个协议,判断数据是否有效,这就是共识机制。区块链中比较常见的共识机制主要有工作量证明、权益证明和股份授权证明三种。关于这几种共识机制的详解我们会在第三篇文章里介绍。
  • 激励层的主要功能则是提供一定的激励措施,鼓励节点参与区块链的安全验证工作。我们以比特币为例,它的奖励机制有两种。在比特币总量达到2100万枚之前,新区块产生后系统将奖励比特币和每笔交易扣除的手续费;当比特币总量达到2100万时,新产生的区块将不再生成比特币,这时奖励机制主要是每笔交易扣除的手续费。
  • 合约层则主要是指各种脚本代码、算法机制以及智能合约等。同样以比特币为例,它是一种可编程的货币,合约层封装的脚本中规定了比特币的交易方式和过程中涉及的细节。

(3)应用层

这个层面则相当于电脑中的各种软件程序,它封装了各种应用场景和案例,其中最简单也是最典型的应用就是大家目前使用的虚拟货币钱包。

举个例子,我们可以把区块链中每个人的钱包想象成一个银行账户,只不过这个账户不需要背后的银行(中心化)来背书,而是靠去中心化的记账,来保证每个人账户余额的准确性。这就是一个典型的区块链应用。

搭建在以太坊上的各类区块链应用就是部署在应用层,所谓可编程货币和可编程金融也将会搭建在应用层。后面的文章我们也会详细介绍区块链和各个行业的结合案例。

(4)总结

在本篇文章中,笔者将区块链的结构分为三层:协议层,拓展层,和应用层。

协议层包括网络层和数据层,相当于区块链系统的操作系统,每一笔交易数据都存储在数据层里,并需要网络上的节点共同确认。

拓展层可以分为共识层,激励层,和合约层,相当于区块链系统的驱动程序。通过智能合约、共识机制、激励机制,来促进区块链系统的高效运转。 

应用层则相当于我们的手机APP,封装了各种应用场景和案例,我们将在专栏的第五篇文章中为大家分享一些经典的案例。


本文采集自互联网,如有版权问题请联系我们进行处理。

联系方式:system@shangyexinzhi.com

文章来源:区块链10分钟

收藏 | 微信分享 微博分享 QQ分享 | 返回顶部