导语:在现今三大主流公链:BTC(PoW)、ETH(即将转为PoS)和EOS(DPoS),使用了完全不同的共识算法,每个都有自己的优点,但同时每个也都不可避免的有自己的缺点。
导语:在现今三大主流公链:BTC(PoW)、ETH(即将转为PoS)和EOS(DPoS),使用了完全不同的共识算法,每个都有自己的优点,但同时每个也都不可避免的有自己的缺点。对比一下这几家主流公链所采用的共识算法的优缺点,可以更清晰地了解Dipperin采用DPoW共识算法的底层逻辑。
由于区块链是去中心化的,也就是说在一个区块链系统中,所有的节点或者说是参与者都是平等的地位。由于参与者的地位平等,因此需要一种机制来决定谁具有打包区块的权力,这种机制就是共识算法。区块链中共识算法的本质,就是谁拥有打包区块的权力(也就是记账权)的问题,谁拥有记账的权力,谁就能够获得记账的奖励。
一、BTC:工作量证明/PoW(Proof of Work)
BTC是区块链的鼻祖,它采用的是PoW(Proof of Work),即工作量证明。这一概念最早在1993年由Cynthia Dwork和Moni Naor的学术论文中提出,并在1999年由Markus Jakobsson与AriJuels对工作量证明这一词的进行了发表。PoW核心设计思路是提出求一个复杂度计算值的运算过程,用户通过进行一定的算力来计算一个满意值并提供给服务方快速做验证,以防止服务被攻击,数据资源被滥用,确保数据交易的公平和安全。
在BTC中,PoW工作其实就是如何去计算一个区块的目标哈希值问题,这个哈希值还必须满足一些必要条件,这个条件在区块链中其实就是一个难度系数值,通过计算出的哈希值是否符合前面N位全是0,最终达成工作量证明。由于哈希值计算的随机性,因此用户只能通过大量的穷举来实现。
举个例子:
比如现在给出一个固定的字符串“Hello,Dipperin”,现在要求计算的难题是将这个字符串与一个随机数(Nonce)拼接起来,并通过SHA256哈希计算一个固定256位长度的哈希值,如果得到的计算结果至少前4位全是0,即认为满足计算条件,同时得到的随机数(Nonce)值证明为达成工作量证明的有效随机数。
当中本聪刚开始提出比特币的时候,比特币还没几个人认可,那时的PoW无疑是最合适的:买币不方便,大众付出劳动挖矿就能拿到币,所以挖矿是最好的办法。
但是随着参与挖矿的人越来越多,PoW的缺点便越来越受人诟病:
1. 消耗了大量的能源。随着全网参与的算力越多,那么下一次调整的难度值就可能越高,能源的消耗就越严重。
2. 网络性能低,需要等待多个确认,容易产生分叉。
二、ETH(Casper):股权证明/PoS(Proof of Stake)
虽然PoW有这些缺点,但是以太坊在它目前的版本中依旧采用了PoW的方法进行挖矿。与比特币的PoW挖矿算法不同的是,以太坊采用的是内存难解的PoW算法,由于它的计算的效率基本与CPU无关,却和内存大小和内存带宽正相关。因此通过共享内存的方式大规模部署的矿机芯片并不能在挖矿效率上有线性或者超线性的增长。这样可以在一定程度上避免像比特币一样的出现算力的中心化,但是还是需要消耗很多的能源,所以以太坊也就一直宣称要从PoW共识转到PoS共识。
PoS共识算法的优点很明显:极少的能源消耗,扩展性强。但是它也有一个严重的问题:”无利害关系(Nothing at Stake)”问题,即如果在一条PoS链上(蓝色链),如果你是一个验证者,在你做完验证押金被退回之后,你可以在蓝色的主链上再次投票形成一条红色的从主链中分出来的链条(如下图),这时你分叉了链条之后,完全无需担心间接的不良后果。不管发生什么事,你都总是可以赢,不会失去任何东西,不管你的行为有多恶意。这就是所谓的“无利害关系”问题,也是以太坊最新的Casper算法(PoS算法的一种)必须解决的问题。
Casper通过引入stake(押金)、checkpoint(检查点)等机制来解决“无利害关系”问题,这可以在一定程度上减轻无利害关系问题,但无法彻底解决,并且还有另外几个问题无法解决(Vitalik Buterin他自己在关于Casper的论文中提出):
1.长程攻击问题:即一旦有些验证者联合起来,退出了抵押,且长时间内他们的抵押是超过总抵押的三分之二,他们可以利用历史的绝对多数联结来固化两个冲突的检查点,而不用担心抵押被没收。
2.灾难性崩溃的问题:这种问题虽然概率比较小,但是理论上是有可能发生的。假设总额大于三分之一押金的验证者在同一时间崩溃,它们因为网络,计算机故障或者他们本身是邪恶的原因,连接不到网络。这时由于整个网络无法达成共识也导致无法产生一条能够被最终确认的链。Casper采用了一种“非活跃泄漏”的方式来解决,具体是:慢慢地把那些没有投票的验证者的押金从总押金中释放出去,最终总押金会下降到可以让剩下活跃的验证者占绝大多数的情况。但是这样产生的问题在于,由于一些意外或者是恶意的原因,整个网络可能被软分叉成了两部分,并且除非该节点放弃在被释放链上的押金,否则无法在回到被释放链上了。
3.隐性中心化的问题:如果一个用户持有较多的coin,比如30%,那么理论上,他是有可能通过不断的成为验证者来是自己在整条链中的coin比例达到50%以上的。这样就会对链产生 51%攻击问题。
之所以比特币和以太坊的共识算法都有自己的问题,主要在于区块链技术长期面临一个“三元悖论”也被称为“不可能三角”。即在一个分布式计算系统的一致性(Consistency)、可用性(Availability)、分区容错性(Partition-tolerant)三者不可兼得,最多只能兼顾其中的两者。
区块链作为典型的分布式系统,它的共识算法就是对系统的安全性、可扩展性和去中心化作了一定的权衡。比特币拥有最强的去中心化(当然,算力的中心化是无法避免的),但是相应了,它牺牲了它的可扩展性,每10分钟一个区块,每秒7笔交易,这个性能太过低下了。以太坊目前的PoW算法,一旦交易过大就会导致大量交易需要排队上链,造成链的拥堵,交易费用上升,性能问题也很严重。而以太坊即将采用的Capser算法,从目前他们自己的分析来看,他们优先考虑一致性,因为它不允许在没有绝大多数验证者同意的情况下完成checkpoint,这样区块也就不会达到最终的确认状态,但是它也在一定程度上放弃了安全性,即链在某种情况下可能出现分叉。
三、EOS:委任权益证明/DPoS(Delegated Proof of Stake)
而EOS所采用的DPoS(股份权益证明),它的原理是让每一个持有EOS的人进行投票,由此产生21位代表,可以将其理解为21个超级节点或者矿池,而这21个超级节点彼此的权利是完全相等的。从某种角度来看,DPoS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。这种机制的优点是大幅度缩小参与验证和记账节点的数量,可以达到秒级共识验证;缺点在于选举固定数量的见证人作为记账候选人有可能不适合完全去中心化的场景,另外在网络节点数量少的场景,选举的见证人代表性也不强。
四、Dipperin:确定性的工作量证明/DPoW(Deterministic Proof of Work)
针对于BTC、ETH以及EOS的共识算法及它们现存的缺点,Dipperin提出了自己的共识算法确定性的工作量证明DPoW(Deterministic Proof of Work),在DPoW共识算法中,使用了PoW、VRF(可验证随机函数)、PBFT等共识和加密技术以及防卡死机制,这样能够在获得高扩展性的同时保证安全性并且尽可能的去中心化。下面就来介绍一下Dipperin的DPoW共识算法,及其和三大主流公链共识算法的对比。
首先,对于BTC的PoW算法,Dipperin做了一定的改进,使用了分片的工作量证明,它的特点是将工作量证明计算过程分工,由分片服务器和矿工节点构成的hash难题解答过程,其基本原理如下:
1.分片服务器将工作量证明的整个搜索空间划分成多个部分,需要保证划分的各小区间之间不会有相互覆盖,然后将其分配给为其工作的矿工节点。
2.矿工节点将会在分配的搜索空间上计算hash难题以寻求完成工作量证明。矿工节点在计算过程中需要定时监听分片服务器的消息通知,以防分片服务器更新工作量搜索空间或重新分配任务。一旦矿工完成工作量证明,便会将满足条件的区块提交给分片服务器。
3.分片服务器接收到矿工提交的区块后,将其提交给校验服务器集群,并等待验证结果。
其次,Dipperin引入了校验者节点的角色,这些校验者节点的主要作用是通过共识来确认一个块,当块被共识确认了以后才能将它加到区块链上。这样就能避免纯PoW算法确认时间过长的问题。Dipperin采用PBFT共识算法来进行验证者之间的共识,PBFT在共识算法中是强一致性和高效的代表。然而,为了保证其安全性和存活性,必须有超过2/3的共识节点为诚实节点。因此,如何尽可能从广大节点中选取出诚实节点作为验证者代表变得极为重要。
Dipperin采用了一种基于VRF的验证者抽签机制。为了抵御女巫攻击,Dipperin对每个用户设定了权重,而这个权重则来源于用户自身的信誉。Dipperin的系统对用户的信誉进行量化计算,通过信誉来衡量用户的权重。使用抽签的方式选取验证者,信誉高的具有更高机会被选中。Dipperin假设网络中2/3的信誉是好的,那么链的安全性可以得到保障。Dipperin认为基于信誉的安全性假设,比起基于算力,或者基于股份的更为合理,更为公平。
信誉:Reputation=F(Stake,Performance,Nonce)
其中,Stake押金数代表着作恶成本,Performance绩效代表着过去用户作为验证者时的业绩,Nonce是该帐号相关的交易数,其他数据相同的情况下,交易数越高,信誉值越高。
最后,Dipperin对验证者的选取使用密码掷签,密码掷签的作用是从选出一小部分作为区块提出者或者验证者,且他们的身份可以被所有其他用户验证。密码掷签的实现是VRF算法,对于一个公认的输入(input),用户使用私钥SK和一个Hash函数可以产生一个Hash值和一个Proof。其他用户则可以通过这个Hash值和Proof,结合该用户的公钥PK,证实这个Hash值是否是由这个用户针对Input所产生的,并且在这个过程中,该用户的私钥自始至终没有泄露。用户通过这种方式得到验证,其他用户便可以相信他是某一段时间的验证者。用这种方式,通过一个公认的输入(Input)便可以随机选出一组用户,且其身份可以被其他人验证。Dipperin结合用户的信誉度R、一个使用VRF计算出的随机数种子seed(用来充当用户的幸运值,避免信誉度高的人能够一直被选上,提供给新参与者一些机会)。
这种抽签机制保证了根据用户的权重,只有一小部分用户被随机选出,且他们的身份可以被所有用户验证。对于攻击者来说,随机的结果无法被提前预测,无法操控。Dipperin的抽签机制提供了客观安全性,即整个过程是客观的,完全通过计算做决策,人的干预无法影响这个过程。
这种客观的安全性也能够避免EOS的代表选举曾遭到贿选问题。Dipperin的验证者选举过程透明。因为没有人为因素操纵竞选结果,所以不存在贿选的可能性。同样也没有人可以预知选举结果,所以也不存在矿工贿赂验证者打包其区块的可能性。
总的来说,Dipperin的DPoW的共识算法综合考虑了共识的去中心化程度和交易的效率问题,可以达到秒级出块,2000TPS的效率,采用VRF密码掷签避免PoS算法中的公正性和DPoS中的中心化问题。