大家好,我是虞双齐,当前市场上还未有系统讲解整理区块链共识算法的教程。从这篇文章起,我将系统地讲解区块链共识算法。

这篇文章是关于工作量证明的第一部分初识PoW,主要讲比特币下工作量证明共识的历史发展与基本原理。

首先,我们需要了解分布式系统(distributed system)概念。在《分布式系统概念与设计》一书中,这样定义分布式系统:

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

另一本书《分布式系统原理和范型》说道:

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。

白话点说,就是一群独立计算机集合共同对外提供服务。但对于用户来说,就像是一台计算机在提供服务一样。这里有一个巨大的挑战,如何确保每台独立的计算机对用户的响应是一致的,只有在每台计算机的数据一致时,才能给用户提供一致的响应。

如何保证在分布式系统中每台计算机行为一致性,即如何建立分布式共识。这也是莱斯利·兰波特1(Leslie Lamport)等人在1982年提出的拜占庭将军问题。所谓拜占庭将军问题是指,在战争中互不信任的各城邦军队如何达成共识并决定是否出兵的决策过程,延伸到计算机领域,试图建立具有容错性的分布式系统,即使部分节点失效也能保证系统运行正常。

传统分布式系统依旧运行在中心化环境中,具有一定的信任基础,如果需要建立一个去中心化的分布式系统。如隐匿的加密货币系统,该怎么达成共识?早在20世纪80年代,密码朋克就有了加密货币的设想。密码朋克宣言中写道:

电子时代,隐私是开放的社会不可或缺……如果我们期望有隐私,那我们必须亲自捍卫。我们用密码学,匿名邮件转发系统,数字签名以及电子货币保障我们的隐私。

如何构建一个安全、稳定、有效的隐匿系统,前辈们滋滋不求,一直进行尝试但每次都以失败告终。直到2008年10月31日,中本聪(化名)第一次出现,他在一个密码朋克邮件组中发帖2,写到:

我一直在研究一种全新的电子现金系统,它完全是点对点的,没有可信赖的第三方。 I’ve been working on a new electronic cash system that’s fully peer-to-peer, with no trusted third party.

从软件工程上,比特币是一个分布式系统。中本聪利用密码学知识解决了分布式共识问题,而且是零信任环境。 他巧妙地利用加密哈希算法特性(比特币使用的哈希算法是SHA-256,这类SHA-2算法簇是一种“单向”操作)。对于给定的哈希值,没有实用的方法可以反向计算出原始输入,也就是说很难伪造,且不同的原始输入值对应的哈希值差异大,无规律可循。

从上图中,我们可以看到只有细微差异的三个输入值:”hello”、”Hello”、”Hello!“,其对应的哈希值天壤之别。 你可以从这个在线工具体验哈希值。

比特币系统中会自动使用一个系数(难度值),要求每个区块的哈希值必须符合要求系数,且每两周更新一次系数。因为哈希算法的单向性操作,无法逆向根据哈希值计算原始输入。因此为了寻找一个符合要求的哈希值,矿工就不得不在利用已知的前区块哈希、交易集哈希、时间戳再上附加一个数字,不断的更换数字,使用这个值计算出的哈希值能满足难度要求。

找出那个数字的耗时只取决于计算机哈希计算速度和难度系数,计算速度越快能越早找出,难度越大,查找的次数越多,时间越长。这个数字是不确定的,是1到2的256次方之间的数,称之为随机数nonce。

有了这个随机数,矿工立即将随机数记录到区块上并立即广播这个区块,其他节点收到这个区块后,只需要执行一次哈希运算就可以验证这个区块是否符合难度要求。一旦符合要求,节点便放弃本地的挖矿工作,立即进入下一个区块的挖矿。如果全网51%以上的节点都接收了这个区块,全网便已达成共识。找出这个随机数的矿工,将获得奖励(比特币)。

这就是工作证明,简称PoW(proof of work),也称为工作量证明,只有劳动才有收获,多劳多得,没有不劳而获

工作证明早期便用使用,主要用于防止DOS攻击,以及过滤垃圾邮件,强迫每个邮件发送者,必须进行一段垃圾运算,人为造成一小段时间的延迟,比如1s。正常发送邮件的人,每天只发几封十几封,几乎不会察觉什么。但是,发送垃圾邮件的人就惨了,之前限制他发送速度的是网速,每秒能发1000封,现在又多了个CPU性能的限制,速度变成了每秒1封。速度降低1000倍,也就减少了垃圾邮件的影响。 类似的策略也可以用于反爬虫,反机器人一类的。

PoW算法革命性的解决分布式共识决策问题。在一个充满欺诈的分布式环境中,不需要任何第三方介入,也不需要任何节点间的协作,就让各个节点间达成一致性共识。

如何达成共识的呢?因为有成千上万的矿工同时在对一个高度的区块寻找随机数,意味着只要时间充足,总能找到。很有可能有多个矿工相继找到随机数。这样网络中便存在多个符合要求的区块,造成区块链分叉。

到底该选哪一条继续延伸?此时就看网络中的大部分矿工如何选择,默认原则是选择最长的一个分支继续挖矿。经过短暂分叉后又走在一起,分分合合,携手共进。

比特币通过PoW算法和最长链(总算力最大)原则,来达成分布式共识决策。这种共识算法,既有优势又有劣势,下次我们一起继续客观的分析PoW共识算法优劣,以及如何在传统中心化系统中运用工作量证明。

如果你感兴趣,可以关注我的百度熊掌号-死磕以太坊微博,第一时间查看更新。死磕以太坊,死磕区块链技术,让你深度观察区块链技术。


  1. 莱斯利·兰波特(英语:Leslie Lamport,1941年2月7日-),美国计算机科学家。也是排版系统LaTeX的开发者。 [return]
  2. 翻译在归档邮件 [return]