在第一节(编者注:中译本见文末)中,我们探讨了拜占庭将军问题的概念,如何实现拜占庭容错,以及二者与区块链之间的关系。
上一篇文章中提到的算法实际上是实现拜占庭容错的一种解决方案。然而,该方案还不够有效,其变化方案又存在局限性,网络中的叛徒人数不能超过将军人数的1/3。
-通过由 Lamport、Shostak和Pease 提出的算法解决拜占庭问题的运行时间(n=参与者人数,m=叛徒人数)-
这将我们引向了计算机科学的一个经典问题:
我们能做得更好吗?
本文的主题是讨论实现拜占庭容错的替代性算法。
注意:请原谅我对部分内容有所简化。这些算法背后有很多复杂的研究。我会在论述过程中提供链接,以便感兴趣的读者进一步研究。
区块链使用共识算法选择一名领导者,以决定下一个区块内容。
该领导者还负责将该区块在网络中广播出来,以便其他节点能够核实其内容的有效性。
工作量证明(PoW)
对于比特币和以太坊等各有特点的虚拟货币来说,工作量证明是目前最流行的算法,应用于各种加密货币如比特币和以太坊,每个版本有各自的区别。
在继续论述之前,先为非技术类读者介绍一下:
哈希函数是可以用来将任意长度的数据映射为固定长度的数据的函数¹。
如果一个哈稀函数是安全的话,其输出值与随机数无异。
在工作量证明中,为了选出一位参与者成为领导者并选择下一个加入区块链的区块,参与者必须解决一个特定的数学问题。
这个数学问题可能是:
已知数据X,找到一个数字 n,使得n附加到 X的结果的哈希值是一个小于 Y的数字。
由于上述示例使用的哈希函数具备加密安全性[1,2],要想解决该问题只能依靠蛮力(即尝试所有组合)。换言之,从概率上来说,在大多数时候第一个解决上述问题的参与者是拥有最多算力的人。这些参与者也被称为矿工。
哈希函数之所以取得了广泛的成功主要是因为其具备以下特性:
对于给定问题很难找到解决方法
一旦找到问题的答案,很容易就能证实它是对的
每挖出一个新的区块,矿工就会得到一些代币奖励(区块奖励、交易费),以此激励他们继续挖矿。在工作量证明中,其它节点通过检验该区块数据的哈希值是否小于预设值来验证该区块的有效性。
由于算力的供给有限,抑制了矿工的作弊行为。攻击网络的成本很高,因为除了要投入高昂的硬件和电力成本,还会造成潜在挖矿利润的流失。
该图片很好地显示了比特币等代币是如何使用工作量证明来抵挡恶意攻击的。
如果有读者对链分裂(即分叉或链重组)是如何在有争议的情况下发生感兴趣的话,建议阅读这篇文章。
工作量证明提供了所需安全性,并且迄今为止已被证明很有效。但是这非常耗电:
几乎所有非洲国家(各自)的耗电量都比不上比特币矿业。
权益证明(PoS)
在继续阐述之前,先让我将领导者选举(即选择下一个区块的参与者)类比成彩票:
就彩票而言,从概率上来说,如果Bob买的彩票比Alice多,他赢的可能性就会更高。
同理可得:
就工作量证明而言,如果Bob拥有的算力和电力都比Alice多——因此能够计算出更多的输出值——他赢(挖出下一个区块)的可能性就会更高。
同理又可得:
就权益证明而言,如果Bob的权益比Alice多,他赢(“挖出”下一个区块)的可能性就会更高。
权益证明用权益替代了工作量证明在电力和算力方面的要求。权益指的是参与者在一段时间内愿意锁定的代币量。作为回报,他们成为下一个领导者并选择下一个区块的可能性是与他们所下的赌注成正比的。目前有几种代币使用纯权益证明,如Nxt和Blackcoin等。
权益证明的主要问题是所谓的“无利害关系(nothing at stake)”问题。从本质上来说,该问题主要是,在出现分叉的情况下,权益持有者有动机在由分叉形成的两条链上都下赌注,更有可能出现双重支付问题。欲知详情,请点击此处。
为了避免上述问题,混合共识算法出现了,例如Decred就使用了工作量证明和权益证明的结合算法。以太坊基金会通过 Casper The Friendly Ghost 和 Casper The Friendly Finality Gadget 对安全的分布式权益证明协议进行了积极的研究。
结语
在本文中,我们讨论了工作量证明和权益证明的概念。目前,它们都是实现拜占庭容错的共识算法,实际运用于如今的区块链系统之中。
其他共识算法还包括实用拜占庭容错(即PBFT,Practical Byzantine Fault Tolerance,用于Tendermint)和分布式拜占庭容错(即Distributed Byzantine Fault Tolerance,用于NEO)等。PBFT和Casper之间的比较可见此处。
谢谢James Martin Duffy。
领取专属 10元无门槛券
私享最新 技术干货