原创 Zeo THU学生区块链
点击“阅读全文”,观看完整视频
本系列课程是清华大学学生区块链协会THUBA推出,由PlatON赞助的区块链课程,涵盖了从区块链基础学习到深度原理研究等方面。
引言
在上节课中我们学习了工作量证明(PoW,Proof of Work)共识机制,比特币系统采用的PoW工作量证明机制能在无身份情况下有效地防止女巫攻击。但是PoW为了保障安全性带来的能耗成为了世界性问题。根据剑桥比特币电力消耗指数估计,比特币系统1年的耗电量为118.41TWh,超过了荷兰国家一年的耗电量111.0TWh[1]。也接近于黄金开采每年的耗电量131 TWh。尽管比特币信仰者们坚称这些耗电量带来的安全性是有重大意义的,但是其他区块链系统都在寻求更加环保高效的共识机制来解决女巫问题。
权益证明(PoS,Proof of Stake)是大家看到的另一条出路。让我们回顾PoW机制的经济模型,矿工购买矿机参与挖矿,获取比特币奖励,出售比特币再购买矿机。这一套经济体系的安全性在于,如果矿工拥有更多的矿机,那么更没有动机去攻击比特币系统,否则手里的矿机也会随着比特币的贬值而贬值。
那么,我们移除这一循环中的矿机,直接将奖励发给那些持有代币的人,似乎也能达到同样的效果。根据这一假设,拥有更多代币的人,更没有动机去攻击比特币系统,否则手里的代币会因为系统安全性降低而直接贬值。
但这里存在一个小问题,代币的流动性比矿机更强,攻击者可能通过借贷他人的代币进行攻击,并且因为攻击导致代币价格下跌降低还款金额。因此,一个安全的PoS机制都会将代币持有时间这个因素纳入考量,通常采用质押的方式。
我们现在考虑一个纯粹的PoS共识算法,从PoW映射过来,则是成为出块节点的概率与账户余额的总量成正比,每轮出块前根据某一随机算法选到出块节点。这样能有效避免PoW带来的重复工作。
这里存在一些明显的问题:
1. 如何公开随机选择下一个出块节点?
2. 如果选到的出块节点不在线应该如何处理?
3. 如何避免恶意出块节点一次生成多个不同区块导致分叉?
接下来我们会介绍各类PoS协议是如何解决这些问题的。目前在PoS的大领域下,主要有三类解决方案:
1. PoW+PoS方案
2. DPoS方案
3. 随机数PoS方案
PoW+PoS方案
由于PoW的随机性,可以帮助节点们随机竞争出下一个出块节点。那么可以仍然采用PoW选出下一个节点的机制,但是如果账户余额越多的节点,对应的PoW难度越小,这样可以极大节省全局算力。
2012年,King等人提出了PPcoin系统,采用了PoS和PoW混合的机制,每次出块的时候,为了避免富者愈富的马太效应,King, Sunny等人设计的PpCoin方案[2]采取了燃烧币龄的机制。节点持有余额并不能降低PoW的难度,而是要在出块中包含一个特殊转账,证明拥有该资产一段时间,余额数量*持有时间作为币龄可以降低PoW难度。
这一机制在初期会导致各节点更多争夺资产来增加出块概率,但是如果出块收益持续上涨,并且资产分布稳定之后,节点仍然会增加算力来增加出块概率。因此,这一方案只是缓兵之计,并不能真正解决PoW内卷带来的能量消耗。为此,PpCoin采取多种设计来解决每当难度升高16倍,采矿产出就会减半。
DPoS方案
DPoS方案为了解决节点在线问题,允许用户将自己的资产质押给其他节点代为参与共识,通过选取链上质押资产最多的部分节点组成委员会。完成委员会的选举之后,委员会内部进行传统分布式共识算法。
由于委员会规模有限,能满足传统分布式共识算法例如PBFT、Hotstuff等的数量要求。此外,这些共识算法的拜占庭容错特性也能抵抗委员会中可能出现的部分恶意节点。最后,这些共识算法提供的安全性能保证区块的一致,即不可能出现分叉的情况。
但是,这一方案在很大程度上牺牲了去中心化,由于委员会中的节点能持续获取出块奖励,其他用户更有动机将资产质押在委员会节点上。这将导致委员会的固化以及随之而来的中心化问题。由于委员会节点固定,出块节点的范围也容易判断,并且攻击委员会节点将直接导致系统性风险,例如延迟新区块产生或者数据访问。
此外,系统安全性依赖于委员会节点质押的资产数量,但是其中只有一部分是委员会节点自身提供的资产。随着链上生态的繁荣,攻击者可能放弃质押资产进行攻击,获取更多的链上资产,并且可能通过二级市场做空等方式获取更大利润。因此,经济模型带来的安全性是动态并且不稳定的。
随机数PoS方案
为了解决这一问题,Algorand和PlatON采用了随机数PoS方案。由于所有账户的余额情况都在区块链上公开可验证,因此只需要一个随机数以及选择算法,我们就可以将随机数映射到一个账户,选择控制该账户的节点作为下一个出块节点。
但是,在区块链上生成安全无偏的随机数是一个困难的问题,传统的随机数种子加上伪随机生成算法的模式并不能在公开的区块链环境中使用。因为随机数种子公开会导致所有用户可以预测下一个出块节点,这将导致很多问题,例如攻击者可以DOS攻击下一个出块节点破坏系统的活性(系统无法继续出块)。另一方面,一旦其他节点发现自己并不是下一个出块节点,由于失去奖励,将进入离线状态,因此区块链上的随机数必须满足不可预测的性质。
尽管区块哈希在一定程度上满足不可预测的性质,但是出块节点能通过尝试不同区块寻找对自己有利的随机数。因此,PoS中的随机数还要求不可修改的特性。
为了同时满足不可预测性和不可修改性,随机数PoS方案通常采用可验证随机函数VRF(Verifiable Random Functions)选取委员会。每个节点独立运行VRF生成随机数,根据生成的随机数判断自己是否处于委员会中,并且该随机数可以由公钥验证,节点无法修改。
PoS总结
相较于PoW机制,PoS机制通过资产同样避免了女巫攻击,攻击者伪造大量身份没有任何收益。但仅凭PoW或者PoS机制无法保证区块链对新区块达成一致,因此PoW机制采用最大难度子链或者最大难度子树来保证区块的一致性。PoS机制无法保证区块生成的难度,因此节点可以大量生成新区块,因此需要能保证每个产生的区块都达成一致性,通常采用传统BFT共识算法。
另一方面,PoS机制中,先选择出块节点然后出块会带来节点离线的问题。PoW中每个区块是竞争单位,因此不存在在线问题。PoS如果同样采用区块为竞争单位则会导致一个攻击者产生大量区块分叉。因此PoS通常选择一个委员会而非单一节点,委员会中采用传统分布式共识防止区块分叉。
质押投票的PoS机制优势在于需要在线的节点数量有限,节省系统能耗,但是缺点在于中心化程度严重,攻击者也有了明确的攻击目标。因此出块节点还需要构建更多哨兵节点来避免DOS攻击。这与区块链系统去中心化的精神一定程度上背道而驰。
基于随机数的PoS机制能很好解决这一问题,在出块节点提交证明之前,攻击者无法判断下一个出块节点,因此也难以攻击目标。所有节点均有机会成为出块节点获取奖励,因此更加主动在线运行,增强系统稳定性。
参考文献
1. 剑桥比特币电力消耗指数 https://ccaf.io/cbeci/index
2. King, Sunny, and Scott Nadal. “Ppcoin: Peer-to-peer crypto-currency with proof-of-stake.” self-published paper, August 19.1 (2012).
3. PPC:一种P2P(点对点)的权益证明(Proof of Stake)密码学货币(修订版)https://www.peercoin.net/whitepapers/peercoin-paper-cn.pdf
4. Gilad, Yossi, et al. “Algorand: Scaling byzantine agreements for cryptocurrencies.” Proceedings of the 26th symposium on operating systems principles. 2017.
5. PoS共识中验证人选举的随机方案(下)https://www.tuoluo.cn/article/detail-10054843.html
本文转载自https://mp.weixin.qq.com/s/f-nzMOlhYYZg1qjBW1p4rg