美文网首页
PoW+PoS混合共识的简单示例(下篇)

PoW+PoS混合共识的简单示例(下篇)

作者: Buffalo_Lv | 来源:发表于2019-01-21 19:06 被阅读75次

    上篇已经分析了单一的PoW共识存在的分叉攻击问题,以及引入PoW+PoS混合共识解决分叉攻击的大体思路。分叉攻击在现实中已经出现过,比如BTG和ETC被攻击事件。所以本篇将对PoW+PoS混合共识的过程进行分析。总体上可以将「PoS投票子系统」看成是一个观察者,这个观察者在持续监视并确定「PoW记账子系统」的走势,以避免大算力分叉攻击的发生。PoS投票子系统自身可以利用BFT类共识算法、VRF等机制,对投票结果达成一致。

    如图1所示,黑色和红色区块构成PoW链,紫色区块表示恶意攻击的分叉链,PoW链负责处理转账交易和执行智能合约。绿色和蓝色区块构成PoS链,绿色区块包含了对PoW区块的51%以上的币权投票确认,蓝色区块是PoS投票子系统自身的更新,比如持币用户重新选举投票代理人等等。而无论对于哪条链,每追加一个新区块,账本数据就迁移到一个新状态。每个新区块都是对前一时刻账本数据的状态更新。

    图1

    PoS链会每隔4个PoW区块进行一次确认,30号PoS区块对60号PoW区块进行币权投票确认(分别简称S30与W60),其包含51%以上的币权投票交易;

    PoS链故意延后于PoW链,S30在W63~W64的时间点,才对W60进行投票确认,以提高准确率。

    PoW链最多隔7个区块就必须对PoS链的投票结果做引用确认,例如W67或之前(比如W65)对S30的引用确认;

    S31内包含了PoS系统自身的某些变更(比如用户Alice更换投票代理人);

    S32对W64进行币权投票确认,其包含51%以上的币权投票交易;

    PoS子系统观察到紫色区块广播明显晚于黑色区块广播(比如接收到A0的时间和接收到W66的时间非常靠近),因此S32将A0认定为分叉区块,所以W70可以引用接续A3区块,进行分叉融合:两条链上没有冲突的交易全部生效,冲突的交易,以黑色链为准,紫色链矿工不能获取到任何区块奖励和交易手续费。分叉融合不是必选设计,这里只说明其可行性。

    假设S33不能被正常产出,则PoW链会在W75或之前的位置悬停,无法继续前进,必须等待PoS子系统再次稳定运行后,才能继续前进。若PoW链悬停时间较长,会导致传统的挖矿难度调整算法不够精准,因此新算法可参考PoS链所包含的时间戳序列,以扣除悬停时间。

    PoW+PoS混合共识解决了PoW区块的概率确定性问题,可以实现最终确定性,大算力矿工必须同时持有51%以上的币权,才可对系统发起分叉攻击,这是极其困难的。这里所介绍的混合共识本质上是将「算力分叉攻击的隐患」转化成「PoS投票子系统不能正常运转的隐患」。但PoS投票子系统运转失败后可以通过社群活动,重新再次启动运行,不会给用户带来账面上的任何财产损失,而51%算力攻击带来的双花交易及其对真实交易的否认却无法补救。所以在设计公链系统时,PoS+PoW混合共识值得考虑,混合共识也有助于一个公有链自举成功,纯PoW链在自举过程中很容易被外部恶意算力杀死。

    后记:写完本文之后,我又想起,为促进PoW区块引用PoS投票区块,可设置获额外的区块奖励,并不需要强制规定「最多隔7个区块就必须对PoS链的投票结果做引用确认」,并修改「PoS链会每隔4个PoW区块进行1次确认」为「PoS链会每隔大于4个PoW区块进行1次确认」,这样可以实现当PoS子系统不能正常运转时,PoW链不会悬停,但这时的PoW链是脆弱的,在PoS子系统恢复运转之后,由于经济激励机制,PoW链会立即引用最新的PoS投票区块。系统的主干链选取规则既不是最长(Nakamoto)优先,也不是最重(GHOST)优先,而是最多投票次数、最长、最难的链才是主干链。

    相关文章

      网友评论

          本文标题:PoW+PoS混合共识的简单示例(下篇)

          本文链接:https://www.haomeiwen.com/subject/wafhjqtx.html