了解区块链的基本(第二部分):工作量证明(PoW)和股权证明(PoS)
在第一部分中,我们讨论了拜占庭将军问题、如何实现拜占庭容错以及他们与区块链的关系。
在上一篇文章中提到的算法实际上就是实现拜占庭容错的解决方案。但是,那个解决方案还不够有效率,它的变型也是有限制的,即不到三分之一的网络是不诚实的。
用Lamport、Shostak和Pease提出的算法解决的拜占庭将军问题的运行时间
(n = 成员数量, m = 叛徒数量)
这把我们带到了计算机科学中一个经典的问题:
我们能做的更好吗?
本文的主题将讨论实现拜占庭容错的替代算法。
注意:请原谅我做了一些简化。这些算法背后都有很多复杂的研究。我接下来将会为那些感兴趣的、想要更深入研究的读者们提供链接。
区块链用共识算法来选举一位领导者来决定下一个区块的内容。
那个领导者还要负责把该区块广播到网络,以便于其他同行可以验证其内容的有效性。
工作量证明(PoW)
这是像比特币和以太坊等货币最常用的算法,每一种都有自己的不同。
在继续之前,为了非技术性读者的一点解释:
一个散列函数(或音译哈希函数)是任何可以将任意大小的数据映射到固定大小的数据的函数。
如果一个散列函数是安全的,它的输出是无法与随机结果区分开的。
在工作量证明中,一个成员要想成为领导者并选择下一个要添加到区块链的区块,他们必须要找到解决一个特定数学问题的方法。
比如那个数学问题是:
给定数据X,找到一个数n,如附加到X结果的n的散列是一个小于Y的数。
鉴于所使用的散列函数是加密安全的,找到解决这个问题的唯一方法就是用暴风算法(尝试所有的组合)。换句话说,从概率学的角度,首先解决上述问题的成员是拥有最大计算能力的成员。这些成员也被称为矿工。
这获得广泛的成功主要得益于一下特质:
这个问题很难找到解决方法
当该问题有解决方法的时候,很容易验证它的正确性
每当一个区块被开采的时候,该矿工会获得一些货币(区块奖励、交易费用),因此他就更有动力继续采矿。在工作证明中,其他节点通过检查区块的散列是否小于预设数字来验证区块的有效性。
由于计算能力的供应有限,矿工也不会想作弊。因为硬件、能源和错过的潜在开采利润的高成本,攻击网络会损失很多。
图片很好的说明了比特币和其他使用工作证明的币种是如何阻止恶意行为的。
那些对链分裂(又名分叉或链重组)如何在分歧情况下工作感兴趣的读者,我建议读读这篇文章 (https://medium.com/@alpalpalp/chain-splits-and-resolutions-d3398bddf4ab)。
工作量证明提供了所需的安全性,并且迄今为止也被证实是好用的。但是,它非常耗能:
几乎所有的非洲国家(单独的)都比比特币矿业消耗的电力要少
股权证明(PoS)
在继续之前,让我把领导者选举(选择下一个区块的成员)比喻为抽奖:
在抽奖中,如果Bob比Alice有更多的票,他就更有可能获胜。
与此类似:
在工作量证明中,如果Bob比Alice拥有更多的计算能力和能量,从而可以输出更多的工作——他就更有可能获胜(开采下一个区块)。
再一次,类似的:
在股权证明中,如果Bob比Alice拥有更多股权,他就更有可能获胜(“开采”下一个区块)。
股权证明去掉了工作量证明对于能源和计算能力的要求,并用股权替代。股权就是在一段时间内成员愿意锁定的货币数量。作为回报,他们有和他们的股权成比例的机会成为下一个领导者,并选择下一个区块。现在有一些币种只用股权证明如Nxt和Blackcoin。
PoS的主要问题就是所谓的缺乏利害关系。从本质上来说,在分叉的情况下,股权持有人不是没有在两条链上持股的动机,然后就会增加双重支出问题的危险性。想了解更多,看这里:https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed
为了避免这种情况,出现了混合共识算法,如Decred使用的PoW-PoS组合。以太坊基金和Casper The Friendly以及Ghost Casper The Friendly Finality Gadget在一起积极研究一个安全的、去中心化的股权证明协议。
总结
在本文中,我们讨论了工作量证明和股权证明,它们是实现了拜占庭容错的共识算法,并在当今的区块链系统中得到实际应用。其他共识算法例如实用拜占庭容错PBFT(Tendermint)或分散式拜占庭容错(NEO)也是存在的。想了解比较PBFT和Casper的朋友可以看这里:https://blog.cosmos.network/consensus-compare-casper-vs-tendermint-6df154ad56ae