区块链共识算法:DPoS、PoW和PoS浅析

区块链中的共识算法目前具有工业成熟度的是PoW、PoS和DPoS,其次还有一些基于这些算法的变种和单一币种使用的共识算法,例如:Ripple共识(瑞波币共识证明)、PoC共识(容量证明)、PoE共识(运动量证明)。

PoX类的算法,容错阀值是50%,而分布式一致算法PBFT(拜占庭容错)及其变种的容错阀值是33%左右,这里的百分比是指网络延迟、网络故障、作弊节点等占全网的比例。

与经典的分布式一致算法相比,区块链领域里的分布式一致算法(PoX类)通过概率选择记账者降低了潜在的提案者,提高了可用性,但同时也延长了达成最终一致性的时间。

PoW工作量证明

工作量证明(Proof-of-Work, PoW)是一种对应服务与资源滥用、或是阻断服务攻击的经济对策。一般是要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。...现时此一技术成为了加密货币的主流共识机制之一,如比特币所采用的技术 -- 维基百科

理解起来很容易,就是为了选取有效的节点来记账,首先要证明你是真正的工作者(矿工),先交给你一个有适当难度的工作,如果快速的完成了,那么说明你有能力做这个工作,然后才把记账的工作交给你,并且在记账完成时,给到一定的奖励。

这个机制最早用于抵抗垃圾邮件,也就是发送一封邮件前,要计算一道有难度的数学题,其中要消耗掉一部分算力。如果我们是正常的发送一封邮件,这部分算力不会占用过多时间;但是如果要发送大量邮件(比如垃圾邮件),那么需要消耗的计算能力则会呈几何级增长,对垃圾邮件发送者来说,这是个不划算的事情。因此,使用PoW机制,能有效的防止垃圾邮件。

在区块链中,最常用的运算是哈希函数运算(比特币使用 SHA-256哈希函数),哈希函数的原理是,当你输入任意一个原始字符串(文本),经过哈希运算,都能得到一个固定长度的哈希值;当原始字符串改变时哪怕仅仅只有一个字符,运算结果(哈希值)都会大大不同。因此,为了得到特定的哈希值,只能通过穷举运算(暴力破解)的方式来运算,这个过程需要进行大量的算力。

在比特币中,一个交易要想被确认:(1)它存在于最长的分支的区块里(block),(2)至少有5个验证过的(PoW共识算法验证)区块在其后面得到验证。一个攻击者(作弊者)要想发出双重支付攻击,那么必须投入超过总体一半以上的运算量(51%攻击),才能篡改结果,这使得攻击的成本变得高昂,难以实现。

PoS权益证明

权益证明是一种投票机制,通过固定时间协调所有节点参与投票(这个投票机制有点类似于传统的分布式一致算法),根据某种规则(例如持有代币数量、占有币数的时间或提供存储空间大小等)判断每个节点的权重,最后选取权重最高的节点作为检查节点,获得记账权和奖励(利息)。

在现实世界中,PoS很普遍,最为熟知的例子就是股票,股票是用来记录股权的证明,股票持有量最多的,拥有更多的投票权和收益权(利息)。

PoS的防作弊机制是利益捆绑,股东自己保证安全,拥有投票权多的人获取的收益大,如果该投票权最多的人作弊的话,损失最大的也是他自己。

和PoW算法相比较,不需要矿工继续的进行挖矿消耗算力记账,更节省能源。

不过PoS算法对多节点一致性验证、防伪等要求很高,而且随着节点的增多,效率会越来越慢,因为节点越多,一致性越难。

另外一点是,拥有大量代币的节点可以坐享其成,无法做到公平竞争,有形成中心化的风险(大股东就是中心)。而且,在选举的环节中,步骤较多,容易产生安全漏洞(常见的有权益粉碎攻击)。

权益粉碎攻击(nothing-at-the-stake attack),由于PoS中,代币越少,权益也越少,而且很难改变现状(如果持币大户不出售代币的情况下)。为了获取更多权益,持币少的节点,就有可能去不断的尝试分叉,在PoS共识机制里,即是尝试失败了,也不会消耗太多资源;但如果成功了,那么就会使整个币的价值降低,但由于他们的钱很少,也不会太在乎;这是人性里的恶,我不好,也不让你好。

DPoS委托权益证明

委托权益证明(Delegated Proof of Stake)机制是PoS机制的优化版本,DPoS选择一些节点代表来参与交易验证和记账。例如:EOS选择了21个超级节点,100个备用节点来维护整个平台的正常运行。

我们知道区块链作为一个分布式网络,它也具有分布式系统的特性,若使用PoS机制在成千上万的网络节点中达到一致性,效率将会很低,也是一个十分漫长的过程。

使用DPoS机制能够大幅度的提升选举效率,在几十个最多上百个节点之间进行一致性投票一般可以在秒级完成并达成共识。

DPoS委托权益证明的缺点是严重依赖于节点所持有的代币,但是代币在很多国家都是被禁止的。

三者之间的对比

PoW采用简单粗暴但极为有效的方式,通过节点首先自证其资质后才进行广播的方式,大幅度减少了网络间的通讯压力,但与之带来的问题则在于自证资质的计算资源消耗极大。

PoS采用与传统分布式一致性验证类似的机制,通过代币数量(或存储容量等指标)作为权重依据,使用某种分布式算法选举出每次的检查点节点。这种机制的好处在于没有消耗计算资源的自证资质过程,但是带来的问题在于每次选举时在大量节点的网络中对网络压力极大。同时PoS也没有防御恶意分叉的能力。

DPoS作为PoS的优化变形,通过缩小选举节点的数量以减少网络压力,是一种典型的分治策略:将所有节点分为领导者与跟随者,只有领导者之间达成共识后才会通知跟随者。该机制能够在不增加计算资源的前提下有效减少网络压力,在优秀的软件实现中将会具有较强的应用价值。

你可能感兴趣的:(区块链共识算法:DPoS、PoW和PoS浅析)