共识机制简史,从POS 到 SPOS
修罗智尊
2018-10-20

共识机制是区块链的核心技术之一,不论在哪个发展阶段,都应是我们关注的重点。

共识机制让分布式网络能可靠地处理一个或多个节点的故障。失败的节点可能会表现出一种常常被忽略的行为类型——也就是说,将冲突的信息发送到系统的其他节点。有了共识机制,则能让所有节点取得共识,进而排除冲突信息,保证节点信息状态的一致性。

区块链最早采用的共识机制是由比特币引入的 PoW,后随时间推移和技术发展,Sunny King 为解决 PoW 种种缺点而推出 PoS 机制(落地表现是点点币)。后来,V神受此启发做了以太坊,BM 在此基础上开发了 DPoS。直到最近Sunny King 回归并推出全新的共识机制 SPoS。下面一起来了解下各共识机制的发展史。

1.中本聪的比特币和 POW

POW,Proof Of Work(工作量证明),最早由源自用于反垃圾邮件的HashCash算法。密码学家戴伟于 1998 年将 POW 结合签名交易技术提出了 B-money 设计,这是 POW 机制作为数字货币共识机制第一次被提出,只是 B-money 没有很好的解决区块链中著名的“双重花费”问题。

到了 2008 年,中本聪融合了密码学和去中心化技术的精髓,发表了具有划时代意义的论文《btc:一种点对点的电子现金系统》,提出 BlockChain 这种数据结构。BlockChain 能无需信任,建立一套去中心化的电子交易体系。到了 2009 年 1 月,btc 网络正式上线,版本开源客户端发表,比特币由此诞生。

比特币采用 POW 共识,它规定,矿工们在处理交易数据(也即对数据进行哈希)的同时,不断将打包的交易数据添加一个随机数并进行哈希计算,求得一位前 23 位为 0 的哈希值,作为区块的 nonce。当全网有一位矿工哈希出 nonce 时,他就会把自己打包的区块公布出去,其他节点收到并验证区块后就会一致认为这个区块接到了区块链上,就继续进行下一个区块的打包和哈希计算。

由于要得出符合要求的 nonce 很难,因此得以保证在一段时间内,系统中只能出现少数合法提案。 同时,这些少量的合法提案会在网络中进行广播,收到的用户进行验证后会基于它认为的最长链上继续计算。因此,系统中虽然可能出现链的分叉(Fork),但最终会有一条链成为最长链。

Hash 问题具有不可逆的特点,因此,目前除了暴力计算外,还没有有效的解决算法。反之,如果获得符合要求的 nonce,则说明在概率上付出了对应的算力。谁的算力多,谁最先解决问题的概率就越大。当掌握超过全网一半算力时,从概率上就能控制链的走向。这也是所谓 51% 攻击的由来。

作为最早出现的区块链货币,比特币总有不完善之处。比特币为了交易的安全性而牺牲记账效率采用了 POW 机制,但随着节点的增加,挖矿所导致的高能耗逐渐暴露出来。时至今日,全球比特币网络消耗的能量几乎等于三峡大坝发电量的2/3。

POW 的优点:

  1. 去中心化,将记账权公平的分派到其他节点。节点能够获得的币的数量,取决于其挖矿贡献的有效工作,也就是说,节点用于挖矿的矿机的性能越好,分给该节点的收益就会越多,这就是根据节点的工作证明来执行币的分配方式。

  2. 安全性高,破坏系统需要投入极大的成本,如果想作弊,要有压倒大多数人的算力(51%攻击)。因为作弊要付出一定成本,作弊者就会谨慎对待了。在比特币的 POW机制中,由于获得计算结果的概率趋近于所占算力比例,因此在不掌握51%以上算力的前提下,矿工欺诈的成本要显著高于诚实挖矿,甚至不可能完成欺诈(由于概率过低)。

POW的缺点:

  1. 挖矿造成大量的资源浪费。目前 bitcoin 已经吸引全球大部分的算力。这让依据算力公平分配奖励的机制,演变为了对矿机算力的大举投入,扭曲了中本聪的设计初衷。

  2. 需要等待多个确认,网络性能太低。比特币区块链的共识达成的周期较长(10分钟),现在每秒交易量上限是 7 笔,不适合商业应用(visa 的平均每秒交易量上万,支付宝峰值接近 9 万)

  3. POW 共识算法算力集中化,慢慢的偏离了原来的去中心化轨道。从比特币扩容之争可以看到,算力高的大型矿池是主人,而持币的人没有参与决定的权利,比特币即将失去“去中心化”的标签。

Pow 还有很多的缺点,其中的一些问题有无更好的解决方案呢?且看 Pos。

2.Sunny king 的点点币和 POS

比特币之后,很多模仿比特币的区块链货币也出现了,如莱特币等,但这些货币都采用了低效率高能耗的 POW 机制,区块链领域至此很久都没有革命性的创新。

直到 2012 年,Sunny King 发布了点点币(Peercoin,也被称为 PPCoin,PPC),并在点点币中首次提出 POS 共识机制,一改 POW 当道的历史,而点点币也作为第一个采用 POS 的区块链货币而被载入历史。此后出现的以太坊和 EOS 都只是 Sunny King 思想的延续,更不用说其他公链了。

POS,Proof of Stake(权益证明机制),是 POW 的升级共识机制。POS 根据每个节点所占代币的比例和时间来决定记账权和奖励;等比例的降低挖矿难度,从而加快找随机数的速度,因此POS不需要大量算力来维持网络安全。

简单说来就是:持有越多,获得越多。

POS 试图解决 POW 机制中大量资源被浪费的情况。这种机制通过计算节点所持有币占总币数的百分比以及占有币数的币龄来决定该节点获得本次记账权利的概率。其中币龄=持有币的数量*持有这些数量币所经过的时间,一旦币被转账了,该用户转出的币所涉及的币龄就会归零。

在 POW 机制中,由于想要找到符合条件的 nonce 往往需要花费大量的电力和时间成本。因此,为了使每个区块更快被生成,POS 机制去掉了穷举 nonce 的过程,继而采用以下更快速的算法:

SHA256(SHA256(Bprev),A,t)≤balance(A)m

(H 某个哈希函数,t 为 UTC 时间戳,Bprev 指的是上一个区块balance(A) 代表账户 A 的账户余额)

等式右边 m 是某个固定的实数,唯一可以不断调整的参数是 t。因此,当balance(A)越大,找到合理 t 的概率越大。网络中,普遍对于 t 的范围有所限制,如可以尝试的时间戳不能超过标准时间戳 1 小时,也就说,一个节点可以尝试 7200 次,来找到一个符合条件的 t,如果找不到即可放弃。因此,在 PoS 中,一个账户的余额越多,在同等算力下,就越容易发现下一个区块。

从上面的描述可以看出,节点记账权的获得难度与节点持有的权益成反比,相对于 POW,POS 共识在一定程度减少了数学运算带来的资源消耗,出块性能也得到了相应提升,但依然是基于哈希运算竞争获取记账权的方式,可监管性弱。该共识机制容错性和 POW 相同。

POS 的优点:

1)在一定程度上缩短了共识达成的时间。

2)不再需要大量消耗能源挖矿。

3)POS 当然也能防作弊,因为如果一名持有 51% 以上股权的人作弊,相当于他坑了自己,因为一个人自己不会杀死自己的钱。

4)防止算力中心化导致矿工作恶。

POS 的缺点:

1)还是需要挖矿,本质上没有解决商业应用的痛点;

2)所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上有可能存在其他攻击影响。

3)极端的情况下会带来中心化的结果。POS 机制由股东自己保证安全,工作原理是利益捆绑。在这个模式下,不持有 POS 的人无法对 POS 构成威胁。POS 的安全取决于持有者,和其他任何因素无关。POS 虽然解决了 POW 的能耗的问题,但全节点确认会让区块确认的效率提不起来,且时间越长,也越容易产生马太效应,即持有币越多的人会获得更多的币奖励,从而加大贫富差距,最终产生超过 50% 的中心化节点,被动演化为非预期的中心化的结果。

4)恶意的节点验证者可以在没有任何损失的情况下去把自己的币押在分叉链上推动硬分叉,该问题也被称为“无利害关系("nothing at stake")”问题(而 pow 机制下,矿工分叉需要消耗算力资源,因此不会出现此种情况)。

Pos 开创了新共识的先河,创新较强但也不太完善。且看 Casper 如何进化?

3.举步维艰的 Eth 和 Casper 共识机制

从 2014 年 1 月 V 神发布 Eth 白皮书《以太坊:一个下一代加密货币和去中心化应用平台》开始,使用 Eth 的人越来越多,很多人在 Eth 上发布了各种智能合约,这些智能合约的运行给基于 POW 机制的 Eth 网络带来了极大的压力,Eth 网络拥堵不断,Gas 价格高企,由此让网络确认时间大幅延长、DAPP 运行成本飙升。整个以太坊网络随着用户的增长和 DAPP 的增加,逐步陷入了困境。

为了改善 Eth 的运行效率,Eth 的创始人 V 神计划在以太坊中引入改进版的 POS 共识,并逐步取代目前所使用的 POW 共识,这个改进版的 POS 被称为 Casper。

Casper 是一种基于保证金的经济激励共识协议(security-deposit based economic consensus protocol),是以太坊计划在未来采用的共识机制,属于 POS 的一个分支扩展,旨在解决 POS 中存在的无利害关系问题("nothing at stake",即验证者通过在给定高度为多个有冲突的区块投票,从而无需代价地破坏网络安全性)。

Casper 协议中的节点,称为“锁定保证金的验证人(bonded validators)”,必须先缴纳保证金(这一步叫做锁定保证金,"bonding")才可以参与出块和共识形成。出块是一个独立于其它所有事件而发生的过程:验证人收集交易,当轮到他们出块的时间时,他们就制造一个区块,签名,然后发送到网络上。Casper 共识协议通过对这些保证金的直接控制来约束验证人的行为。

具体来说就是,如果一个验证人作出了任何 Casper 认为“无效”的事情,他的保证金将被罚没,出块和参与共识的权利也会被取消。保证金的引入解决了"无利害关系问题",也就是经典 POS 协议中做坏事的代价很低的问题。现在有了代价,而且被客观证明做错事的验证人将会付出这个代价。

容易发现,只有在验证人当前已缴纳保证金的情况下他的签名才有意义(economically meaningful)。这代表客户端只能依赖他们知道的锁定保证金的验证人的签名。因此当客户端接收和鉴別共识数据时,共识认可的链必须起源于出自当前锁定保证金的验证人的块。


在 POW 协议中共识认可的链则是起源于创世块——只要你知道创世块的数据你就可以鉴别出共识认可的链。这里,只要你知道当前锁定保证金的验证人,你就可以鉴别出共识认可的链。不知道当前锁定保证金的验证人列表的客户端必须先通过另外的信道获取这个列表。这个限制通过要求所有人用当前信息鉴别共识解决了“远程攻击(long range attack)”问题。

验证人列表随着验证人保证金不断的锁定,罚没,解锁而变动。如果客户端离线过长时间,它的验证人列表就会由于过时而不能用来鉴别共识。如果客户端经常在线,则能够与最新的验证人列表保持同步,但问题是在第一次同步之前,客户端还是需要从其他信道获取最新锁定保证金的验证人列表。

这个“需要从其他信道鉴别共识至少一次”的性质,正是 V 神所说的“弱主观性(weak subjectivity)”。在我们的上下文中,如果信息可以在协议之内被验证,则可称之为“客观的”;如果信息必须依赖协议外的手段才可验证,则称为“主观的”。在弱主观性共识协议中,分叉选择规则是有状态的,因此客户端必须初始化(有些时候是更新)这个状态才能鉴别共识。在这里,这个状态被用来辨认当前锁定保证金的验证人(更精确的说法可能是当前验证人列表的密码学哈希)。

2018 年 8 月 31 日,以太坊网络的 14 位核心开发人员决定通过视频通话,宣布推迟 Casper 的开发 12 个月。

Casper 的优点:none

Casper 的缺点:none

4. BM 的 EOS 和 DPOS 共识机制

由于比特币的 POW 机制导致运行效率极度低下,在结合了 POS 技术的基础上,Daniel Larimer(BM)决定在区块链技术中引入一个新的共识机制——DPOS,来取代交易速度极慢的 POW。2014 年 2 月,BM 发布了 Bitshares(也称为 BTS,比特股),首次采用了 DPOS 技术。但 Bitshares 因为技术不成熟而导致了一系列问题。

后来,被称为区块链 2.0 的以太坊也很难支持起一个庞大的去中心化商业应用生态。然后,BM 决定以以太坊为对手,建立一个区块链操作系统 EOS,这个新系统融入了 BM 对区块链技术的理解和总结,使用了改进后的 DPOS 共识机制。

DPOS,Delegated Proof of Stake(委任权益证明机制),是基于 POW 及 POS 的基础上创建的一种新型共识算法。它既能解决 POW 能耗过大的问题,也能避免 POS 权益分配下可能产生的“信任天平”偏颇的问题。

DPoS 中的“D”为“Delegated”,意为授权、委托;DPoS 与 PoS 的主要区别是所有持币者选举若干代表,由代表参与记账。

EOS 定义民主选择出的代表为区块链网络里的区块验证者,“代表”这个术语可以与“区块验证者”等同使用。EOS 规定由 21 位代表作为网络中的主节点,新建区块,签署并验证交易。这些代表是由 EOS 代币持有者投票成立的“授权事务所”。21 位“委托者”的设计,是因过多的委托者(比如 BTS 所采用 101 个)会分散 EOS 代币持有者的注意力,造成代币持有者决策力的削弱。


使用 EOS.IO 软件,区块以 126 个区块为一轮(有 21 个生产者,每个生产者可以在三秒的时间片内生产 6 个区块,平均每 0.5 秒一个区块)。在每一轮的开始,21 个区块生产者通过token持有者的投票被选中。选中的生产者依据商定好的顺序生产区块,这个顺序由 15 个或者更多的生产者商定。

理论上这样可以极大提升系统性能,但也带来了网络延迟问题:0.5 秒的确认时间会导致下一个出块者还没有收到上一个出块者的区块,就该生产下一个区块了,那么下一个出块者会忽略上一个区块,导致区块链分叉(相同区块高度有两个区块)。比如:中国见证人后面可能就是美国见证人,中美网络延迟有时高达 300 ms,很有可能到时美国见证人没有收到中国见证人的区块时,就该出块了,那么中国见证人的区块就会被略过。

为解决这个问题,BM 将原先的随机出块顺序改为由见证人商议后确定的出块顺序,这样网络连接延迟较低的见证人之间就可以相邻出块。比如:日本的见证人后面是中国的见证人,再后面是俄罗斯的见证人,再后面是英国的见证人,再后面是美国的见证人。这样可以大大降低见证人之间的网络延迟。使得 0.5 秒的出块速度有了理论上的可能。

如果一个生产者错过了一个区块,并且在 24 小时内没有生产任何区块,该生产者将会被移除。直到这些“宕机”的生产者们及时通知区块链,他们将打算再次生产区块才被重新加入。通过不安排那些不够可靠的节点,尽可能的减少错过区块创建,来让整个网络运行得更平稳。

DPOS 优点:

  1. 能将维系网络运行的能源消耗降到最低,以一种低成本的方式来管理整个链上的运行,这就很大程度上解决了 POW 的能源耗损问题。

  2. 更快的出块速度,实现平均 0.5 秒一个的出块速度,大幅提高了系统的运行效率和吞吐量。

  3. 更加“去中心化”的管理方式,将区块链网络运行的决定权分散到全网的各个节点手中,这就很大程度上避免了 POS 容易出现的被庄家操纵的“控股”现象。DPOS 共识机制的出现,将通过实施区块链上的“民主”来对抗“中心化”所产生的负面效应,用被公选的“弱中心化”的方式来提高全网运维的效率。

DPOS 缺点:

  1. 持股人的投票的积极性并不高。绝大多数持股人(90%+)从未参与投票。这是因为投票需要时间、精力以及技能,而这恰恰是大多数投资者所缺乏的。

  2. 实现复杂、中间步骤较多,对于坏节点的处理存在诸多困难。社区选举不能及时有效的阻止一些破坏节点的出现,给网络造成安全隐患。

Dpos 虽然做的效率很高,但缺点也不容小视。

5.Sunny King全新的SPOS共识机制

在第三个时代,ETH 的成功延续到了 BM 的采用了半中心化 POS 的 EOS DPOS。随着区块链爆发,世界上很多天才在 Sunny King 的基础上衍生各种变形 POS 出来。但这些都只是针对 POS 共识的一些小的修改,还有着自己各种各样的问题,并不能支撑未来的大规模高性能商业级区块链。

Vitalik 已经意识到转向新的共识机制是 ETH 的生死之战,但 Eth 的新共识机制 Casper 的上线由于技术的不成熟而需要改进因此一拖再拖;而 BM 的 DPOS 又出现了各种情况。还需要大幅度完善。

Sunny King 也在不断的反思着 POS 的不完善之处,在其他人为了改进 POS 而焦头烂额的时候,Sunny King 终于带着他反思多年的成果回归了!这个成果就是 POS 的下一个版本,这个版本会开创一个新的时代,支撑未来的区块链经济时代。

这个新版本的 POS 具备更高的性能和安全性,是次世代的共识机制,其名为 SPOS。

SPOS("supernode proof-of-stake"即“超级节点权益证明”)共识机制,是 POS 的发明人 Sunny King 在 2018 年 9 月提出,并将在 VEE 中引入的全新共识机制。SPOS 的一大特点就是采用了固定的出块时间,

该系统具有 60 个节点,其中 15 个作为主节点,45 个为备用节点。每个节点都具备极高的运算性能和网络带宽,从而让整个体统具备极高的吞吐量和运行效率。

整个系统具备 60 个铸币槽,每个铸币槽代表了在一分钟内一个固定时间段出块的权限,在系统工作时,各个槽按顺序(由获得该铸币槽所有权的节点)出块。

每个节点可以竞争各个铸币槽的使用权。由于每个节点对应了一个 VEE 账户,而每个账户下面可以绑定 9 个钱包地址,在竞争时是用其中一个地址去竞争一个槽,而且一个地址也只能竞争一个槽,所以每个节点最多可以同时占有 9 个铸币槽,这样可以防止一个节点占有全部的铸币槽。

SPOS 系统在运行时其实就是各个节点轮流出块,这就可以把某个节点的偶发性失效对整个系统的影响降到最小。

由于每个槽上的节点需要按照时间来出块,因此各个节点间的时间同步就显得非常的重要,所以采用了网络时间协议(Network Time Protocol(NTP))来确保各个节点能按顺序进行出块。

NTP 是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS 等等)做同步化,它可以提供高精准度的时间校正(LAN 上与标准间差小于 1 毫秒,WAN 上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP 的目的是在无序的 Internet 环境中提供精确和健壮的时间服务。

节点可以在任意时刻发起对于一个铸币槽使用权的竞争,但为了防止竞争机制被滥用,因此系统会收取较高额度的竞争费用作为威慑。当一个节点作为挑战者向一个铸币槽的使用权的所有者发起竞争申请,SPOS 协议会比较挑战者在该铸币槽上的账户的权益(stake)和被挑战的挖矿节点在该铸币槽上的账户的权益(stake),然后决定竞争的胜出者,并将该铸币槽的使用权交给胜出的一方。

虽然竞争的胜出方是通过较多的权益(stake)在竞争中获胜的,但这些权益的流动性仍是可以保证的,铸币节点随后是可以从自己的账户地址转出权益的。

即使是从 POS 协议的出发点来看,将同一笔权益同时转给不同地址于不同铸币槽的竞争也是被禁止的,这等于是双花攻击。

然而由于权益具备流动性,有些节点为了铸币槽所有权的竞争,而快速的将权益从一个地址转账到其他地址用于其他铸币槽的竞争,从而形成了繁忙竞争攻击(busy contention attack)。为了防止繁忙竞争攻击,在对铸币槽的竞争中对于地址账户余额的衡量标准采用了余额在时间上的累积均值。如果让权益快速的流动,则地址账户的积累均值就会随时间的推移而大幅下降,从而大幅降低了该地址账户面对挑战时的竞争力,这样当节点发起繁忙竞争攻击时就会导致权益流出的地址账户很容易就丧失了铸币权,从而阻止节点发动此类攻击。

用户可以将自己的权益(stake)借给节点,当节点通过出块获得收益时,可以按照比例给权益的借出方分红。虽然节点的账户余额在计算时是算上了所租借的权益,但是节点账户无权使用/转移这部分权益,权益的借出方则可以随时撤回这些借出的权益。

如果一个节点上租借来的权益数量上涨、那么由于单个节点的收益是固定的,那么总权益的上涨势必导致分红率的下降、进而遏制租借权益的上涨,从而形成一套内在的自我调节机制。

这个系统在设计上看起来更加中心化,但 King 也设计出了一套机制保障网络的安全,确保每一个超级节点(supernode)都有平等的权力,防止某个节点权力过大。