区块链的构成要素有哪些?

区块链本质上是一个去中心化的分布式数据库,是由一串密码学相关联数据组成的账本,和现实中的账本一样,它里面的内容也是一些数据,而存放这些数据的就是区块。区块又是一个一个串联起来的,每个区块都有一个块头,用来链接上一个区块的地址,很多个区块通过块头串联起来,好像是链条,于是就有了区块链的说法,区块链被《经济学人》称为“信任的机器”,那么区块链的构成要素有哪些呢?

通过上面的简单介绍,我们首先能知道,区块链的构成要素,首先是区块,接着是链。

众所周知,在现实生活中,一个东西一般都有一个标签。其实在区块链中,一个区块也有一个标签。一个区块上的标签通常包括:高度、时间、当前哈希、前一个区块哈希、默克尔树根、随机数等等。

而区块的标签则是记录了它的一些身份信息,例如它的“商品”编号,它是什么时间“出厂”的,甚至还可以把它看成一个人的唯一身份证号。

这里要说明的一点是:标签是区块外部的东西,区块内部只是数据。当然,具体是什么数据,就要看区块链应用在什么领域了。例如比特币中的区块,它存放的就是比特币的交易记录。

时间戳

在上面的简单介绍中,我们知道,标签里会包含一个区块的“出厂” 时间,也就是时间标记,专业点来说就是区块的时间戳,时间戳会精确到秒。

例如北京时间 1997 年 12 月 31 日 07:00:00,那么它的时间戳就是 1451552400,意思是从格林威治时间2015 年 1 月15 日 0 时起到它出现一共经历了 1451552400 秒。

之所以有这样的设定,是因为区块链是一个全球性的东西,而在现实生活中,不同国家有不同国家的计时方法,如果都按照自己的时间规则来制定,显然不可行,因而才会诞生出时间戳这个东西,将全球的区块链统一起来,一个区块有且只有一个时间,避免了歧义。

时间戳作为交易证明的一个重要信息,区块交易信息不能被更改。

哈希值

哈希值来源于密码学中的一种经典算法,它算出来的数字只能加密,不能解密。 它是根据文件的大小、类型、时间、创作者等用机器计算出来的,很容易就会出现变化,例如一个区块中储存的数据,就算只改了一个字母,它的哈希值也会发生变化。

因为容易变化,谁也不知道下一个区块的哈希值是多少,也没有更改它的软件。哈希值的安全性非常高,伪造哈希值的难度非常高。

要想哈希值发生变化,只有更改数据。可是你想,假如一个区块链中共有 100 个区块,如果 10 号区块的数据变了,也就是哈希值变了,那它就不能与 11 号区块发生连接,这个区块链就断了。

基于此,我们可以知道,哈希值的主要作用就是检验区块中的信息是不是有效。

随机数

在区块的那些标签中,大多数都是固定的值,但只有一个值是不固定的,这就是随机数。

随机数的工作原理如下:

随机数算得上是创建新区块的一把“钥匙”。区块链要串联下去,新区块只有创造出满足条件的哈希值才能被系统接受。但这道数学题的解答非常困难,以致于计算机都不能轻易办到。

区块头其实是有一个难度系数的,正是这个值决定了计算哈希的难度。使用常量来除以难度系数,可以得到一个目标值,难度系数越大,目标值越小。

要创建新区块要做的工作,就是新区块的哈希值一定要小于目标值。因为目标值小得吓人,所以计算难度就大得吓人,有可能要算 10 亿次才算得出来 1 次。

我们前面讲过,一个区块只有一个哈希值,一个区块内部发生的任何微小的变化就会改变它的哈希值。这个随机数就是用来改变哈希值的。随机值发生了变化,很自然地哈希值就会发生变化。

为了让新区块能对应上一个区块,计算的计算机就需要不断改变随机数,以使哈希值发生变化,让区块头的哈希值能够小于目标值,从而让这个新区块能够链入区块链。

Merkle Tree

要理解默克尔根,首先要理解默克尔树,默克尔树的英文名称是 Merkle Tree,我们以比特币为例,看一下它的区块内部的样子:

为它是一个叫默克尔的人发明的,所以就叫默克尔树。

1、想象一下,最上面那个框框,中间是两个绿色的框,最下面是白色的交易记录。

2、如果交易记录 2 的数字改变了,那它首先会影响上面绿色框“1,2 的信息”的数据,接着又会影响最上面那个框的“交易记录根”框的数据。交易记录 1、3、4数字的改变同样如此。由此也可以看出,最底层任意一个框的数据改变以后,都会影响到最上面那个框,使它的数据发生变化。

3、这样,一个区块的数据装满以后,我们是不是只要记住最上面那个框的信息就可以了。这样,框里的任何数据发生了变化,这个最上面那个框的信息就会发生变化。

这种设计是很精妙的,在一个区块的标签中,只要标明了默克尔根的信息,我们就可以校对区块中的内容是不是安全的了。

*文章内容节选于网络

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910A21JC600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券