如图1所示,黑色表示原链,紫色表示恶意攻击的分叉链。无论对于哪一条链,没追加一个新区块,账本数据就迁移到一个新状态。每个新区块都是对前一时刻账本数据的状态更新。若在当前时刻,100号区块之后已经存在长度X的链,并且获得了51%的币权累计投票确认,那么100号区块的状态就确定了。PoW+PoS混合共识解决了PoW的区块和账本状态的概率确定性问题,实现了最终确定性。而且对101号、102号...等后续区块的投票,也将被累计为对100号区块的投票,依次类推。
图1这时攻击者若不能控制51%的币权,则无法实现在100号位置之前创造分叉,而只能选择在之后的区块位置进行分叉,比如101号区块的累计币权投票还没有达到51%,则可能在101号位置制造分叉链。进行PoS投票的持币人或代理人,不在乎哪条链是分叉链,两条链都投,被称为Nothing At Stake问题。解决这个问题,通常可以引入一定比例的押金,若对两条链同时进行投票,则只要检测到另一条链上的投票签名,则罚没押金,不同链上的投票行为是互斥的。如图2所示,若投票人Alice误投给102.b,则不能再投给102.a,只有等到102.a已经确定后,或者主动签名作废对紫色链的投票,Alice才能继续执行对黑色链的投票。币权以币龄的形式设计,投过一次票后的币龄会清零,并给予利息奖励,然后随着区块数量的增加逐步重新累积,但是累积值不会超过一个上限常数。
图2在某些PoW+PoS混合共识中,每隔N个PoW区块,将会执行一次投票,并胜出PoS区块,夹在没两段长度为N的PoW区块之中。我感觉这样可能会有一定的问题,因为PoW矿工每过N个区块,就得停下来等待PoS投票,若PoS子系统出现问题(比如投票人大量离线)而无法正常出块,就会造成整个系统悬停,无法继续产出区块,也就无法提供交易处理与智能合约服务,PoS子系统成为整个系统的短板,限制了整体系统性能的提升,所以可能改进N个PoW区块+1个PoS区块的对齐规定,而是将投票交易稍微向后拖延并尽量均分在N个区块中。直到某个区块的币权投票累计超过51%,这个区块就算最终确定了。投票者可先观察PoW区块的走势,若接着102.a后面有更多个区块,而102.b之后没有或有明显更少量的区块,那么这时投102.a基本是成功的。而不是发现102.a和102.b 就立刻发生投票交易,让全网矿工算力先做选择。投票交易可以形成一颗投票树,挂在PoW区块头上。投票树和交易树可能会竞争区块存储空间,但是投票树也许可以通过优化设计,进行延迟广播,可能不会影响矿工快速广播PoW区块到全网(尚缺乏严谨的实验证明,只是一个优化设想)。这些设计方案都是可选的,可灵活选择。
总结:1、PoS投票在不同链上是互斥的;2、币权以币龄的形式实现,并可以委托给其他投票代理人;3、掌握51%算力的人必须同时掌控51%的币权才可能攻击成功;4、掌握51%的币权的人也必须掌握51%的算力才可能攻击成功。5、但两种形式的51%攻击都没有能力针对已经确定的区块进行攻击,账本具备最终性。6、对发动攻击的分叉链可以执行融合操作。
网友评论