【本文为转载,光武原创,供大家共同学习】
POW算法让所有算力一起竞争猜随机数,第一个猜到的好运人士有资格生产区块,同时全网节点都是验证者。POW虽然安全,但效率偏低,比如比特币:10分钟只能记2000多笔账,原因是矿工把99.99%的精力都花在找随机数上,哪个矿工胆敢沉迷记账而不找随机数,他的下场就是一毛钱奖励都拿不到,白白燃烧电和电脑。
POS算法中,全网节点都是生产者,持有权益者(持币者)负责验证。比如未来的以太坊:没有矿工,只有验证者,验证正确获得奖励,验证错误没收押金。
POW与POS两种共识算法不仅能抗住一些恶意节点、达成正确共识,而且被实践证明可行。但,它们是否是最安全、最快速的共识算法呢?至少现在看来不是,因为有DPOS。
一、什么是DPOS?
Delegated Proof of Stake ——代理权益证明。这是一种基于投票选举的共识算法,有点像人民代表大会:
持有权益者(持币者)有资格选出生产者,如果生产者正确记录,那大家鼓掌;如果生产者不称职,那下次就不选它。
DPOS是否安全呢?至少比人民代表大会安全,因为算法要求系统做三件事:
第一,随机指定生产者出场顺序;
第二,不按顺序生产的区块无效;
第三,每过一个周期洗牌一次,打乱原有顺序;
于是,没有节点能像邻国领袖那样,垄断生产者或验证者的岗位。所以,谦虚地说是“安全”,嚣张点说是“牢不可破”,正常运行三年的Bitshare和一年多的Steemit已经说明了这一点。
DPOS下,生产者做的工作有点像比特币的矿池,不同的是,生产者不再花任何精力找随机数,只把全部精力投在生产正确的区块上。
找随机数的工作劳心费神,很慢,DPOS不找随机数,只验证交易,而验证工作又极其简单。所以,DPOS的出块速度犹如飞电过隙珠翻荷。
如果你只想记住DPOS的一个属性,那就是快。
货比三家一下吧:
基于POW的比特币每秒处理7笔交易;
基于POW和POS的以太坊每秒处理15笔交易;
基于DPOS的比特股(BTS)每秒能处理超10万的交易量。
而且,DPOS允许所有矿池每三秒钟轮换一次,并且其他人已被安排在后续进程中,于是,没有人可以在预设位置外生产区块。
这意味着,生产者之间没有争夺,也不会遗漏区块,每三秒会有一个区块,理论上来说,矿池能做同样的事情,只是比特币和以太坊待共识算法不允许这样做。
那DPOS具体是如何运作的呢?
二、DPOS的运行方式
下文大面积借鉴《DPOS共识算法——缺失的白皮书》内容,实在找不到更能清晰描述DPOS的文字,因为此文作者就是算法发明人:Dan Larimer,网名Byte Master,大家习惯称他BM。
图3 DPOS共识算法发明人:BM
BM他假设一个最简模型:有3个区块生产者:
A、B、C
另外,有两个朴素的前提:
1、最长链胜出
2、诚实节点总是追随有效更长链
基于此,BM开始解释DPOS如何运行,共有六种场景:
1、天下太平的正常情况:生产者按系统排序生产区块。
注意,千万别看反了。上图的意思是:从左边的A开始生产区块,B接在A后面产块,C接在B后面产块,然后轮回到A,以此类推。
这种顺位是系统安排的,生产者在系统调度轮次之外生产的区块都无效。
2、总有不良节点搞事情:少数人的小分叉。
由于生产者顺位由系统安排,所以少数人在出块速度上注定比多数人慢:恶意的少数节点产一个块时,正常的多数节点至少产两个。于是,诚实的2/3多数节点产的链永远比少数节点长。
少数人的鸡飞狗跳丝毫不会影响高铁向前奔腾。
3、断网:网络碎片化
断网会导致任何分叉上都没有绝对多数的生成者。此时,最长的链将倒向最大的那个少数群体。但当网络恢复时,较小的少数群体会切换到最长的那条链,以恢复并修正共识。
可能存在这样三个分叉:其中两个最长的分叉长度相同。在这种情况下,第3个(较小)分叉的块生产者重新加入网络时会打破平局。只要块生产者总数为奇数,不可能长时间保持平局。
另外,生产者的顺位会被系统“洗牌”,这使得出块顺序随机化,从而确保即使是生产者数目相同的两个分叉也会以不同的步长增长,最终导致一个分叉超过另一个。
续:DPOS共识机制或许代表了未来——EOS运行原理简析(二)见链接: