Realtime Price(实时价格):

这五个元素(加密、区块、默克尔树、链、工作量证明)在区块链中是最重要的

作者:传陆编程

发布时间:2019年1月9日

网络来源:百度百家号

前言

区块链从技术层面上来说,其实不算什么新技术,它只是一些传统技术的创新组合(话说,现在的互联网好多新项目也都是这个模式)。区块链所涉及的技术还是比较广泛的,包括数据结构与算法,分布式存储,网络等等。掌握这些知识技术,对学习和理解区块链会有很大帮助。

关于区块链有很多重要元素,这里主要讨论最重要的五个元素。除了名称本身包含的两个要素,区块和链之外,还有三个重要元素,分别是加密、默克尔根和工作量证明。

加密

加密是区块链中最重要的元素,这是区块链的根基,没有加密,区块链就无从谈起。

区块链使用的是SHA-256哈希散列算法进行加密,它是美国国家安全局研发的。简单的理解,它就是一个加密函数。函数的执行效果是,无论你给这个函数传入任何不同信息内容(最大长度限制2^64位),都会产生长度固定(256位)但内容不同的结果,这个结果被称为哈希值,也被称作报文摘要。

这个函数的最大特点就是,验证一个哈希值是不是一段给定信息内容的哈希值很容易,我们只要把这个信息内容放入哈希函数里进行计算,然后比对计算结果即可。但是如果我们想破解一个哈希值,得到精准的原信息内容,这几乎是不可能的。能知道这个哈希值原信息内容的人只有两个,一个是原信息内容的拥有者,另外一个就是上帝。

理论上讲,哈希值是可以碰撞的,也就是两个不同的信息内容,得到同样的哈希值。当我们用穷举法进行2^256+1次哈希计算后,就可以得到哈希值相同,但两个不同的原信息内容。可要进行2^256+1次哈希计算,即便你用世界上最牛的计算机,也要耗费很久的时间,这个时间比现在宇宙的年龄还要长。

区块

区块是用来记录实际数据的。区块包含两个部分,一个是区块头,一个是区块体。区块头主要记录该区块信息特征,例如:区块体的默克尔树的根,难度系数,工作量证明(下文会细说),区块创建时间,前一个区块的哈希值等。区块体主要记录应用场景的实际数据及默克尔树。比如,区块链应用在比特币场景时,区块体记录的是2000多条交易记录,以及这2000多条交易记录生成的默克尔树数据。

需要注意的是,本区块的哈希值,是对区块头信息进行哈希,而不是对整个区块。

默克尔树

默克尔树又称为哈希树,是一种数据存储结构。它由一个根节点、一些枝干节点和一些叶子节点组成。在区块链之前,最经典的应用场景就是P2P下载。区块链在比特币应用中,默克尔树是二叉树,它是一个特殊的哈希树。要求叶子的数量是偶数,每两个叶子连在一个枝干上,然后每两个枝干连在同一个父枝干上,不断的汇总,最终连在一个根节点上。具体实现是,把每一条支付信息进行哈希加密分别得到一个哈希值,然后再每两个哈希值拼接作为信息内容再次进行哈希加密,就这样不停加密,直到最后生成的一个哈希值,这个哈希值就是默克尔树的根,它也会被写进区块头里。如果有记录被篡改,那么会影响到根的哈希值。这样就可以防止篡改一个区块内的某条记录。

说到这,可能有些读者会问,为什么不把所有的叶子数据做个拼接,然后只进行一次哈希加密,这样一样也可以达到防篡改的目的。没错,这样是可以达到记录防篡改的目的,但是,这样做的缺点是,整个区块链要始终保存这些叶子数据,如果这些数据随着时间的推移,没有必要再存储,或者区块链的存储太大需要删减的时候,就尴尬了,一旦删除了这些叶子数据,就无法对根哈希值进行验证了。

另一个原因,分布式存储,数据同步是非常占用网络资源的,所以当本地节点有不同步情况,我们希望的是,只下载同步某些没同步的记录,而不用下载整个区块的数据,这样效率最高,也最节省网络资源。如果读者之前使用过BT下载软件,那么就比较容易理解这个概念了。使用哈希二叉树很容易找到没有同步的记录,1024条记录,我们只需要10步查找,就能定位是哪条数据没有同步,1024*1024条数据,也只需要20次的查找。这种查找效率是非常高的了。

区块链中的链并不像区块那样是一个物理存在,它是一个逻辑概念。其表现为,每个区块头都存储上一个区块的哈希值,而每个区块头在进行哈希加密的时候,一定是包含上一块哈希值。这样,一个个的区块,就从逻辑上,形成了一个有序的链条,并且,区块一旦加入到了这个链条中,如果想要篡改某个区块,那就要篡改该区块以及该区块之后的所有区块信息。这种篡改的时间成本是非常高昂的。如果默克尔树是保证区块本身防篡改的话,那么链就保证了整个区块链生态系统防篡改。

如果,同一时间,有两个区块加入到了区块链的尾端,那么该怎么处理呢?区块链的处理机制是长链优先,在比特币场景下的实际处理方式是,哪一个分叉最先达到6个区块,就把其他的分叉废弃。已经同步这些废弃分叉数据的节点,重新同步最新数据。

长链优先机制本意是最长链,生长最快的链,是最可信的链,因为只有大多数人相信这条分叉的链,这条分叉才能生长最快。但如果有人拥有了全网51%的计算能力,或者有51%的人联合起来的话,那么这条长链就不可信了,这也就是区块链致命弱点。

工作量证明

如果有51%的人联合造假,那么区块链就没有存在的意义了。但区块链要防止某一个人或者某个组织因拥有强大的计算能力而控制整个区块链生态。在比特币场景中,人为设计提高了区块加入链的成本。设计者(传说叫中本聪,但只活在传说中,小编觉得这家伙可能是来自于未来)规定大概10分钟左右,才允许一个新的区块加入链。为了达到这个目的,对加入链的区块的哈希值进行了限制,要求这个哈希值必须小于某个值,才可以加入链,否则就不能加入。

我们知道,一个固定的内容只能产生一个固定的哈希值,这个值也许大于这个临界值,也许小于这个临界值。如果大于了这个临界值,岂不是被剥夺了加入区块链的权利?设计者是这样规定的,在对区块头进行哈希加密的之前,加入一个叫随机值,这个随机值也是区块头信息的一部分。然后再进行哈希加密计算。如果结果符合要求,就加入区块链,如果结果不符合要求,就换一个随机值,再次计算,直到符合要求为止。

这个临界值是由一个常量/难度系数决定的,难度系数越大,这个结果就越小。结果越小,就意味着命中成功的概率越小,计算的次数就越多,耗费的时间就越久。比特币系统会动态调整这个难度系数。如果全网平均区块加入链的时间小于10分钟,那么就会提高难度系数。如果大于10分钟,就会降低难度系数。最终是要保证区块大约在10分钟左右加入链。

一旦找到符合要求的随机值,那么这个随机值就被叫做工作量证明。意思就是说,这个区块是经过大量的计算才加入进来的,这个随机数,就是工作量的最好证明,不信你可以验证试试看?

结束

对于区块链,绝对不能仅仅停留在虚拟货币上。它有更加广泛和深刻意义的场景。但是,这需要参与者的加入,也就是那些进行“工作量”的人。无利不早起,谁会无缘无故的去做这些“工作量”呢?目前最好的最有效的激励机制还是虚拟货币,而且只能是虚拟货币。

相关文章:

比特币布道者

比特币的坚定信仰者!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注