共识算法是指在分布式场景中,多个节点为了达成相同的数据状态而运行的一种分布式算法。
自人类社会产生以来,人们就一直从事着各种各样的贸易活动,货币体系在整个贸易活动中占据着重要的角色,人类经历了从以物易物到贝壳等稀有制品,再到银本位和金本位,最后到今天的法币体系。与一开始的以物易物相比,显然实物货币体系可以极大的提高贸易的效率。而法币与之前的实物货币又有什么区别?当今社会为什么采用法币呢?主要是国家为了控制本国的经济,集中货币发行和使用权,因此法本位与之前的货币相比,法币根本不具有稀有属性,只要国家政府愿意,所有的政府都可以随意的印制钞票,但是同时需要承担带来的通货膨胀等风险。法币依赖的基本是国家政府的公信力,当一个国家的经济越稳定,越富有,黄金储量越充足,这个国家的法币也越为普及和让人信服。而当今国际贸易的繁荣和国际社会的不稳定,法币这些缺陷也被逐渐放大,比如国际贸易每次都需要兑换成对方的法币才能实现贸易买卖,而兑换的过程会产生大量的金钱损耗,比如经济的困难和战争使得美国任意的印制美元,人们手里的美元价值在降低,美国政府窃取了人们的财富,同时也导致美元的公信力下降。因此世界需要一种能够产生共识,大家都认可的,具有稀有性的,能够稳定发展的货币。在2008年,中本聪提出了区块链的想法,实现了数字货币比特币。区块链采用了点对点协议,并基于共识协议来使得各个节点之间的决策达成一致,形成共识。区块链技术因其具备去中心化、信息的不可篡改和不可伪造性以及开放性等特征,在金融、政府办公、防伪溯源、征信以及知识产权等领域有着非常广泛的应用场景。虽然比特币在2008年提出,但是共识协议早在上个世纪七十年代就已经被提出:“一系列的机器能不能达成一致,怎么达成一致。”这个问题被称为共识。共识算法是指在分布式场景中,多个节点为了达成相同的数据状态而运行的一种分布式算法。
在分布式场景中,可能出现网络丢包、时钟漂移、节点宕机、节点作恶等等故障情况,共识算法需要能够容忍这些错误,保证多个节点取得相同的数据状态。
因此根据可容忍的故障类型的不同,可以将共识算法分为两类:
容忍宕机错误类算法(crash
fault tolerant consensus algorithm),可以容忍网络丢包、时钟漂移、部分节点宕机这种节点为良性的错误。常见算法有 Paxos、Raft。
容忍拜占庭错误类算法(byzantine
fault tolerant consensus algorithm),可以容忍部分节点任意类型错误,包括节点作恶的情况。常见算法有 PBFT、工作量证明(PoW)、权益证明(PoS)等。
也根据使用场景的不同,又可将共识算法分为公链共识联盟链共识两类。
下列对常用的几类算法做出详细介绍:
2.1 工作量证明(PoW )
在比特币中,共识就是只有记账权的人才有资格修改账本,而账本的内容具有一致性。在比特币提出的时候,采用了工作证明的共识算法,此概念最早由Cynthia Dwork和Moni Naor于1993年的学术论文提出,工作证明是一种在区块链网络中达成共识机制的主流算法,也是各种加密货币(如比特币和以太坊)的基础共识模型,它描述了这样一种系统:该系统需要付出相当大的努力来挖掘新的区块,以防止恶意使用计算能力、和对系统进行其他可能的攻任何击,例如拒绝服务攻击和其他服务滥用,如通过使服务请求者做一些要求高的工作来发送垃圾邮件。在区块链网络中,PoW 共识机制要求各个挖矿节点要先通过大量计算来证明它们完成并提交的工作,然后它们才有资格接收将包含块的新事务添加到区块链,在工作证明中,谁的计算能力越高,或者说谁的工作量越大,谁就能拥有记账权,被添加到下一个区块。
工作量证明最常用的技术原理是哈希函数。由于输入哈希函数h的任意值n,会对应到一个h(n)结果,而n只要变动一个位元,就会引起雪崩效应,所以几乎无法从h(n)反推回n,因此借由指定查找h(n)的特征,让用户进行大量的穷举运算,就可以达成工作量证明。比特币采用的哈希加密算法为SHA-256,破解该加密算法SHA-256只能通过蛮力求解,几乎是不可能的事情,需要计算几十年。除非量子计算机的出现,在量子计算机的算力面前可能几个小时就解决了,但是以目前来看完全不必担心,其一量子计算机目前的发展完全不足以使其得到实际的普及和应用,在这之间的很长一段时间现有的体系都会发挥应有的作用。其加密算法同时也会得到优化。因此完全可以认为工作量证明是十分可靠的。
PoW算法主要优点有:
主要缺点有:
2.2 延工作量证明(dPoW)
延时工作量证明(dPoW)是由科莫多(Komodo)项目所设计的一种安全机制。基本上来说,它是工作量证明(PoW)共识算法的修改版本,它利用比特币区块链的哈希算力来增强网络安全性。通过使用延时工作量证明(dPoW),Komodo开发人员不仅能够保护自己的网络,还能够保护未来加入Komodo生态系统的任何第三方区块链。实际上,dPoW可以用于保护任何使用UTXO模型开发的独立区块链项目
dPoW 是一种混合共识方法,dPow的原理是允许一个区块链利用第二个区块链的哈希算力(Hashing Power)所提供的安全。该机制是通过一组公证员节点(Notary Node)实现的。公证员节点实现将第一个区块链的数据添加到第二个区块链中。进而,第二个区块链请求在两个区块链间达成妥协,弱化第一个区块链的安全。。
dPoW的主要优点有:
主要缺点有:
2.3 权益证明(PoS )
工作量证明Pow通过算力挖矿获取工作量的证明,获取区块奖励,激励矿工参与维护。而Pow带来的问题最主要的是能耗问题,光比特币的挖矿能耗接近一个国家的耗电量。通过挖矿比拼的是设备的数量,其实也就是拼钱。因此为什么不直接拼钱来分成奖励呢,省下了不必要的挖矿过程。因此基于这个理论,提出权益证明。
权益证明的原理是指通过自己手上的份额来进行算力的统计,权益的份额代表算力的占比,权益持有者都可以投票决定决策的实施与否。
显然PoS 是作为 Pow 的替代技术提出的,意在解决 PoW 的一些内在问题。PoS 没有使用传统挖矿方法,而是用户必须具有系统中的一些权益因此,如果用户拥有多少占比的权益那么该用户挖掘下一个区块的可能性就是多少占比。对于工作量证明,它的优点有
主要缺点有“无利害关系“(Nothing at stake)”攻击问题。这种对多个区块历史(forks)投票的方式不会让区块生成器有任何损失,进而阻碍了达成共识。在 PoS 中,你可以在区块链的双方押注资产(“无厉害关系”问题)。而在 PoW 中,你不能从链的两个方向同时挖矿,因为这难以实现。
2.4 委托权益证明(DPoS )
委托权益证明机制(DPoS)算法是PoS算法的改进。DPoS算法中使用见证人机制(witness)解决了中心化的问题。总共有N个见证人对区块进行签名。DPoS消除了交易需要等待一定数量区块被非信任节点验证的时间消耗。通过减少确认的要求,DPoS算法大大提高了交易的速度。通过信任少量的诚信节点,可以去除区块签名过程中不必要的步骤。DPoS的区块可以比PoW或者PoS容纳更多的交易数量,从而使加密数字货币的交易速度接近像Visa和Mastercard这样的中心化清算系统。
委托权益证明的原理是:
委托权益证明的主要优点有:
主要缺点有:
2.5 实用拜占庭容错算法(PBFT )
拜占庭容错算法是主流的共识算法之一,它起源于莱斯利·兰波特在其论文中描述的拜占庭将军问题:
一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。
首个提出的该问题解决方案称为“实用拜占庭容错”(PBFT),PBFT刚开始是在MIT的Miguel 和 Barbara Liskov在1999年的学术论文中提出的,他们的本意是为设计一个低延迟存储系统设计系统,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行,主要是为了应用于不需要大交易量但需要处理许多事件的数字资产平台,每个节点都可以发布公钥,这是被允许的。节点将签名所有通过节点的消息,以验证其准确性。当得到一定数量的签名想用,此交易就被认定为有效
PBFT算法的运作原理为:
PBFT算法的主要优点有:
高性能的运算,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。
主要缺点有:
除了上述的共识算法外,还有许多基于上述理论进行优化改进的许多算法,在这里简单介绍一下:
无论是在现实生活中,还是计算机世界里,共识算法达成共识都需要解决两个基本的问题:
首先,如何提出一个待共识的提案?如通过令牌传递、随机选取、权重比较、求解难题等;其次,如何让多个节点对该提案达成共识(同意或拒绝),如投票、规则验证等。理论上,如果分布式系统中各节点都能以十分“理想”的性能(瞬间响应、超高吞吐)稳定运行,节点之间通信瞬时送达(如量子纠缠),则实现共识过程并不十分困难,简单地通过广播进行瞬时投票和应答即可。
可惜的是,现实中这样的“理想”系统并不存在。不同节点之间通信存在延迟(光速物理限制、通信处理延迟),并且任意环节都可能存在故障(系统规模越大,发生故障可能性越高)。如通信网络会发生中断、节点会发生故障、甚至存在被入侵的节点故意伪造消息,破坏正常的共识过程。
此外,任何处理都需要成本,共识也是如此。当存在一定信任前提(如接入节点都经过验证、节点性能稳定、安全保障很高)时,达成共识相对容易,共识性能也较高;反之在不可信的场景下,达成共识很难,需要付出较大成本(如时间、经济、安全等)。
因此共识算法的设计通常需要考虑如何达成共识,算法的优劣决定于达成共识的速度、安全性以及达成共识的性能消耗。比如PoW算法,通常性能消耗较大,而DPoW考虑了采用其他区块通过计算得到的安全来减少性能消耗,PoS则通过权益证明避免计算来避免性能的消耗,同时也加快出快的速度,但不可避免的引入部分中心化的问题。而PBFT算法具有高性能的运算,但是容错率较低。
区块链是一种突破性的技术,加密货币的普及,由信息的广泛传递转为价值广泛传递,区块链技术将在各个行业都得到适当的应用与实践。在上述讨论中,本文综述了共识算法在区块链中的应用,以及主流的共识算法:工作量证明算法、延时工作量证明算法、权益证明算法、委托权益证明算法、拜占庭容错算法的分析和对比。没有哪一种算法是完美适用于任何场景的,在速度,安全性和成本上总是会存在折中方案的处理,各有优劣。未来更多的是朝着混合方法的趋势进行发展。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!