一文看懂共识机制和11个主流共识算法
文章主要内容包括:
1. 共识算法简介
2. 共识算法分类
3. 共识算法详解( PoW, PoS, PoH, PoA, PBFT 等)
共识机制简介
在区块链的交流和学习中,「共识算法」是一个很频繁被提起的词汇,正是因为共识算法的存在,区块链的可信性才能被保证。
1. 为什么需要共识机制?
所谓共识,就是多个人达成一致的意思。我们生活中充满了共识机制,比如,一个公司要做决定需要股东们集体商量,签合同需要甲方乙方坐下来协商。这个过程就是达成共识的过程。
在区块链系统中,每个节点必须要做的事情就是让自己的账本跟其他节点的账本达成一致。如果是在传统的中心化场景中,这几乎不是问题,因为有一个中心服务器存在,也就是所谓的主库,其他的从库向主库看齐就行了。
但是在去中心化管理中,没有老大的存在,那么应该如何做出决定呢?这个时候就需要一套算法来保证达成共识。这就是本文要讲的——共识机制。
2. 什么是共识机制?
共识机制(Consensus Mechanism)是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。
虽然共识 (Consensus) 和一致性 (Consistency) 在很多应用场景中被认为是近似等价的, 但二者涵义存在着细微的差别: 共识研究侧重于分布式节点达成一致的过程及其算法, 而一致性研究则侧重于节点共识过程最终达成的稳定状态; 此外, 传统分布式一致性研究大多不考虑拜占庭容错问题, 即假设不存在恶意篡改和伪造数据的拜占庭节点。毕竟,在完全公开透明的区块链网络中,无法保证所有节点都不会作恶。
3. 共识机制可以解决哪些问题?
共识机制可以解决分布式系统中的信任问题,确保各节点之间的数据一致性和安全性。在传统的分布式系统中,由于节点之间没有信任机制,容易受到恶意节点的攻击和篡改,导致系统崩溃或者数据被篡改。另外,在区块链加密技术出现之前,加密数字货币和其他资产一样,具有无限可复制性,如果没有一个中心化的媒介机构,人们没有办法确认一笔数字现金是否已经被花掉。
简单来讲,共识机制可以有效解决两个问题: 双花问题(一笔钱被花了两次)和拜占庭将军问题(恶意节点篡改数据)。
4. 双花问题(Double spend attack)
共识机制可以一定程度上解决双花问题(double spend attack):即一笔钱被花了两次或者两次以上,也叫“双重支付”。猫鼠游戏中,小李子就通过做假支票进行了双花行为,因为支票的验证需要时间,所以在这个时间差内他多次用同一张支票的信息购买物品。
众所周知,区块链节点始终都将最长的链条视为正确的链条,并持续工作和延长它。如果有两个节点同时广播不同版本的新区块,那么将在率先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成最长的链条。等到下一个工作量证明被发现,其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营。
双花是如何实现的呢?分为两种情况:
(1)在确认前的双花。零确认的交易本来就可能最后没有写入区块链。除非小额,最好至少等确认即可规避此类双花。
(2)在确认后的双花。这就要控制超50%算力才能实施。即类似于一个小分叉,将给一个商店的交易放入孤立区块中。这种确认后双花,很难实施,只是理论上可行。
最常见的双花攻击有三种:51%攻击,竞争攻击(Race Attack), 芬尼攻击(Finney Attack)。
51%攻击:51%攻击是指一个人或者团体获得了区块链51%的哈希运算能力的控制权,这意味着他们有能力控制项目的一些方面。在工作量证明区块链(如比特币)上,这将通过获得网络采矿能力的控制权来实现。另一方面,对于权益证明区块链(如Cardano),这将通过控制51%的抵押代币来实现。
竞赛攻击:一个用户同时向两个商家(或者商家和用户本身)发送两笔交易。因此,攻击者会收到两组货物或者收到货物和回收了原始交易成本。
芬尼攻击:一个矿工挖到一个或者一系列的块,这些块里包含他把钱转账给自己其它地址的交易。被挖到的块没有被公布,而是在矿工向商家转账时被保留。然后,商人在矿工公布他们已经挖出的区块之前释放了矿工所支付的货物。随后矿工公布已经挖出的区块,这就会抹掉转账给商家的交易,让商家自掏腰包。
双花攻击经典案例:
2018年,攻击者控制BTG网络上51%以上的算力,控制算力期间,把一定数量的BTG发给自己在交易所的钱包,这条分支命名为分支A。同时,又把这些BTG发给另一个自己控制的钱包,这条分支命名为分支B。分支A上的交易被确认后,攻击者立马卖掉BTG,拿到现金。随后,攻击者在分支B上进行挖矿,由于其控制了51%以上的算力,很快分支B的长度就超过了分支A的长度,分支B就会成为主链,分支A上的交易就会被回滚恢复到上一次的状态。攻击者之前换成现金的那些BTG又回到了自己手里,这些BTG就是交易所的损失。这样,攻击者就凭借50%以上的算力控制,实现了同一笔加密货币的“双花”。
5. 拜占庭将军问题(Byzantine failures)
拜占庭将军问题是Leslie Lamport在10世纪80年代提出的一个假想问题。拜占庭是东罗马帝国的首都,由于当时拜占庭罗马帝国国土辽阔,每支军队的驻地分隔很远,将军们只能靠信使传递消息。发生战争时将军们必须制定统一的行动计划。
然而,这些将军中有叛徒,叛徒希望通过影响统一行动计划的制定与传播,破坏忠诚的将军们一致的行动计划。因此,将军们必须有一个预定的方法协议,使所有忠诚的将军够达成一致。而且少数几个叛徒不能使忠诚的将军做出错误的计划。也就是说,拜占庭将军问题的实质就是要寻找一个方法,使得将军们在一个有叛徒的非信任环境中建立对战斗计划的共识。
在分布式系统中,特别是在区块链网络环境中,也和拜占庭将军的环境类似,有运行正常的服务器(类似忠诚的拜占庭将军),还有故障的服务器,有破坏者的服务器(类似叛变的拜占庭将军)。共识算法的核心是在正常的节点间形成对网络状态的共识。如果只有3个节点的话,拜占庭将军问题是无解的,当节点中有 x 个问题节点,而总结点数小于3x+1时,拜占庭将军问题无解。
比特币的出现轻而易举地解决了这一问题,它为信息发送加入了成本,降低了信息传递的速率,而且加入了一个随机元素使得在一定时间内只有一个将军可以广播信息。第一个广播信息的将军就是第一个发现有效哈希值的计算机,只要其他将军接收到并验证通过了这个有效哈希值和附着在上面的信息,他们就只能使用新的信息更新他们的总账复制,然后重新计算哈希值。下一个计算出有效哈希值的将军就可以将自己再次更新的信息附着在有效哈希值上广播给大家。然后哈希计算竞赛从一个新的开始点重新开始。由于网络信息的持续同步,所有网络上的计算机都使用着同一版本的总账。
共识算法分类
1. 共识机制的历史
当计算机和网络在 1980 年代和 90 年代开始流行时,出现了了共享数据库,以便多个用户可以访问他们存储的信息。大多数都有一个中央数据库,用户可以从不同的站点访问权限。这种设置演变成中心化网络,管理员授予用户权限并维护数据的完整性。
这些共享数据库被称为分布式账本,因为它们记录信息并联网供不同位置的许多用户访问。需要解决的最重要的问题之一是防止数据篡改和未经授权的访问,无论是否是恶意的。需要一种自动化分布式数据库管理的方法来确保数据不被更改。
这种需求导致了分布式自治共识的产生,其中网络上的程序使用加密技术就数据库的状态达成一致。协议旨在通过使用加密算法来创建一长串字母数字数(哈希)来达成,然后由网络上运行的程序进行验证。只有当输入到哈希算法的信息发生变化时,哈希才会发生变化,因此程序被设计为比较哈希以确保它们匹配。
当网络上运行的每个程序都创建了一个匹配的哈希字符串,就可以说该数据已通过网络达成共识。因此,建立了共识机制,通常将信用归功于匿名比特币创建者中本聪。然而,在中本聪发布让比特币出名的白皮书之前,许多人在共识机制上工作了多年。
Moni Naor、Cynthia Dwork、Adam Beck、Nick Szabo 等数据和计算机科学家以及许多其他人致力于开发网络共识机制并做出贡献。
2. 共识算法的分类
根据容错类型的不同,共识算法可以分为两大类:CFT 类共识算法(非拜占庭容错,即不考虑恶意节点)和 BFT 类共识算法(拜占庭容错,也就是说考虑恶意节点)。
是否容忍拜占庭标志着该算法是否能够应用到低信任的网络当中。通常来说,公有链环境中必须使用拜占庭容错算法,而联盟链中可以根据联盟参与方之间的信任程度进行选择,信任程度高默认大家都是善意节点就可以使用 CFT 类算法(非拜占庭容错)。
另外可以根据一致性被分为两大类:概率一致性算法和绝对一致性算法。概率一致性算法指在不同分布式节点之间,有较大概率保证节点间数据达到一致,但仍存在一定概率使得某些节点间数据不一致。例如工作量证明算法(Proof of Work, PoW)、股份证明算法(Proof of Stake, PoS)和委托股权证明算法(Delegated Proof of Stake, DPoS)都属于概率一致性算法。
绝对一致性算法则指在任意时间点,不同分布式节点之间的数据都会保持绝对一致,不存在不同节点间数据不一致的情况。例如PAXOS 算法及其衍生出的 RAFT 算法。
下文根据容错类型进行具体划分和介绍。
3. CFT 类共识算法
Crash Fault Tolerance非拜占庭错误:适用于节点信任程度高的网络。包括 Paxos, Raft。
4. BFT 类共识算法
检查节点是否具有恶意的拜占庭错误倾向于去中心化的结构,包括工作量证明(PoW),权益证明(PoS), 委托权益证明(DPoS), 权威证明(PoA)等。
共识算法详解
看到这里是不是已经有点累了,点个收藏,休息一会继续来啃本文最硬核的部分吧!时间有限的同学可以直接从第三个 PoW算法开始看。
1. Paxos算法
算法简介:1990年Paxos算法是Lamport宗师提出的一种基于消息传递的分布式一致性算法,并获得2013年图灵奖。自Paxos问世以来就持续垄断了分布式一致性算法,主要解决分布式系统中如何就某个特定值达成一致。Paxos 算法的共识过程是 Proposer 提出提案来争取大多数 Acceptor 的支持,当某个 提案获得了超过半数的支持时,发送结案结果给所有节点进行确认,在这个过程中,如果Proposer 出现了故障,可以通过触发超时机制来解决,如果每次新的一轮提案的 Proposer 都恰好故障,那么系统将永远无法达成一致。但这样的概率是极小的。
早期的 Basic Paxos协议复杂,且效率相对较低,所以在后来提出了 Paxos 的改进版本。比如:Fast Paxos, Multi-Paxos 以及 Byzanetine Paxos 等。
使用案例:ZooKeeper
算法原理:Paxos算法运行在允许宕机故障的异步系统中,不要求可靠的消息传递,可容忍消息丢失、延迟、乱序以及重复。它利用大多数 (Majority) 机制保证了2f+1的容错能力,即2f+1个节点的系统最多允许f个节点同时出现故障。只要少于 (n-1)/2次失败,Paxos 就达成共识。这些失败不能是拜占庭式的,否则将违反 BFT 证明。因此,这个算法的前提是假设消息永远不会被破坏,并且节点不会串通破坏系统。
Paxos 通过一组协商回合进行,其中一个节点具有“领导”状态。如果领导者不在线,进展将停滞,直到选出新的领导者,或者如果旧领导者突然重新上线。
Paxos将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner):Proposer: 提出提案 (Proposal)。Proposal信息包括提案编号 (Proposal ID) 和提议的值 (Value)。Acceptor:参与决策,回应Proposers的提案。收到Proposal后可以接受提案,若Proposal获得多数Acceptors的接受,则称该Proposal被批准。Learner:不参与决策,从Proposers/Acceptors学习最新达成一致的提案(Value)。
2. Raft 算法
算法简介:Raft(Replication and Fault Tolerant)算法是 Paxos 算法对的一种简化实现,Raft这一名字来源于"Reliable, Replicated, Redundant, And Fault-Tolerant"(“可靠、可复制、可冗余、可容错”)的首字母缩写。raft利用日志连续性对Paxos做了大量很好的简化。它保证了在一个由 n 个节点构成的系统中有超过一半的节点正常工作的情况下的系统的一致性。不同于Paxos算法直接从分布式一致性问题出发推导出来,Raft算法则是从多副本状态机的角度提出,用于管理多副本状态机的日志复制。比如在一个5个节点的系统中允许2个节点出现非拜占庭错误,如节点宕机,网络分区,消息延时。
使用案例:数据库主从复制,联盟链。
算法原理:Raft 系统中有三种角色:领袖(Leader), 追随者(Follower),候选人(Candidate)在正常情况下只会有一个领袖,其他都是追随者。而领袖会负责所有外部的请求,如果不是领袖的机器收到时,请求会被导到领袖。通常领袖会借由固定时间发送消息,也就是心跳(heartbeat),让追随者知道集群的领袖还在运作。而每个追随者都会设计超时机制(timeout),当超过一定时间没有收到心跳(通常是150 ms或300 ms),系统就会进入选举状态。
此时集群进入新的竞选轮次(term)并开始选举,如果选举成功则新的领袖开始执行工作,反之则视此任期终止,开始新的任期并开始下一场选举。
选举是由候选人发动的。当领袖的心跳停止的时候,这需要候选者以先到先得的方式提名自己,并向其他服务器拉票。每个服务器在每个竞选轮次只会投一票表示支持或反对当前候选人。如果没有获得 过半的选票就进入下一轮竞选。其余候选者继续根据先到先得提名自己。直到选出领袖。
Raft 算法的优越性:第一点是简单性。如果深入挖掘 Paxos 到底比 Raft 复杂在哪里,Heidi Howard 和 Richard Mortier 发现在两个方面体现了 Paxos 的复杂性。第一,Raft 按顺序提交日志,而 Paxos 允许日志不按顺序提交,但需要一个额外的协议来填补可能因此而出现的日志空洞。第二,Raft 中的所有日志的副本都有相同的索引、任期和命令,而 Paxos 中这些任期可能有所不同。
第二点是 Raft 具备了一个高效的领导者选举算法。Paxos 论文中给出的选举算法是通过比较服务器 id 的大小,几个节点同时竞选时,服务器 id 较大的节点胜出。问题是,这样选出的领导者如果缺少一些日志,它不能立即执行写操作,必须首先从别的节点那里复制一些日志。Raft 日志总能选出拥有多数派日志的节点,从而不需要追赶日志,虽然有时候选举会因为瓜分选票而重试,但总体来说是一个更有效率的选举算法。
对于 Paxos 算法,如果一个服务器非常落后,甚至落后了几天的日志,但却在某个时候选为了领导者,这将导致一定时间的阻塞。可在 Raft 算法中,永远不会选出日志落后的节点。
3. 工作量证明(Proof of Work, PoW)
算法简介:最早用来对抗垃圾邮件的一种计算机技术。2008年,中本聪在《比特币:一种点对点的电子现金系统》比特币白皮书中提出了比特币与区块链,创新的设计了 PoW算法,被应用在比特币上,用来解决一个数学难题来参与共识。算法的核心内容是利用算力来寻找一个满足区块哈希的 nonce 值。但是人们很快发现这种共识机制的问题,即能耗大,以及被大矿池把持算力之后,仍然会导致中心化问题。
使用案例:Bitcoin, ETH1.0, Litecoin, Conflux, Dogecoin。
算法原理:工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中的,对于验证方是易于验证的。它与验证码不同,验证码的设计出发点是易于被人类解决而不是被计算机解决。
工作量证明(PoW)通过计算寻找一个数值 Nonce,使得拼凑上交易数据后内容的 hash 值满足规定的上限。在节点成功找到满足的 hash 值后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。
缺点:速度慢;耗能巨大,对环境不好;易受“规模经济”(economies of scale)的影响。
优点:自 2009 年以来得到了广泛测试,目前依然得到广泛的使用。
4. 权益证明(Proof of Stake, PoS)
算法简介:2011年,Quantum 在 Bitcointalk 论坛上提出。2012年8月,首个基于 PoS共识的区块链项目点点币(Peercoin)诞生,点点币(Peercoin)是第一个实现 PoS 算法的应用。点点币中权益即为币龄,币龄是节点所持币的数量与其持有时间的乘积,发起交易会消耗一定的币龄,每消耗365币龄时也将获得年利率5%的利息。
使用者: Ethereum(2.0), Conflux, Peercoin。
算法原理:例如某人在一笔交易中持有点点币100个,共持有30天,那么币龄为3000,后来发现了一个 PoS块,币龄被清空为0,获得利息为0.05*3000/365=0.41币。共识过程中节点通过消耗的币龄来获取记账权,节点消耗的币龄越多,获得记账权的机会越大。算法设定的主链原则为:消耗币龄最多的链为系统中正确有效的链。
优点:不需要强大、昂贵的挖矿设备。减少资源消耗,减少51%攻击的可能性。
缺点:可能导致富人囤积加密货币,形成马太效应,可能产生加密货币通胀问题。
5. 历史证明(Proof of History, PoH)
算法简介:历史证明是 Solana 创建,这是一个高吞吐量区块链,于2018年启动,历史证明使网络参与者可以通过使用可验证的延迟功能在时间上达成共识,从而避免了”最长链”规则。
PoH是网络的时钟,而 TowerBFT是其守望台,其任务是防止恶意节点欺骗时间参数。对某个区块进行投票的任何验证者都必须等待下一个区块的产生,并从历史证明中获得”时间已经过去”的确认,然后才能再次投票。
Solana 则巧妙将基于哈希的时间链和状态分离,不是将每个区块的哈希链接在一起,而是网络中验证者对于区块内的哈希本身进行哈希,这种机制就是 PoH。PoH通过使用高频可验证延迟函数(VDF),随着时间的推移建立可通过密码验证的事件顺序。从本质上讲,这意味着 PoH就像一个加密时钟,可以帮助网络就时间和事件顺序达成一致,而无需等待其他节点的消息。历史证明的区块链状态哈希的连续输出能够给出可验证的事件顺序。
使用者:Solana
算法原理: Leader 给每个签名数据(待证明的交易)生成一个时间戳,直接将交易排序,这样就避免了 PoS中时间排序的问题,每个保证验证者都可以独立进行验证,这样大大缩短了验证时时间重排序的问题,只要进行交易证明的验证即可。
优点:费用低,每笔交易的费用只有几分之一美分,交易速度快,可延展性好,
缺点:中心化的担忧,Solana 目前有不到1200个验证者来验证其网络上的交易。更少的去中心化应用程序:常被称为以太坊杀手。根据其网站,在 Solana 上创建了350多个 Dapp,相比之下以太坊上有近3000个 Dapp,而这正是 Defi 目前需要更多开发时间和创新的地方。
6. 权威证明(Proof of Authority, PoA)
算法简介:由以太坊(ETH)和 Parity Technologies 公司的联合创始人Gavin Wood 于2017年提出。PoA 机制不挖矿也不需要 Token。在基于次 PoA的区块链网络中,所有的交易和区块均由验证人处理。PoA平台维护成本低,但是在 PoA中,交易和验证区块链的验证人,必须是能通过可靠性审查的人。所以,PoA的验证人必须非常关注自身声誉。声誉在 PoA里就是非常重要的资产。一般情况下,验证人会公开自己的实际身份。目前,这种共识机制形成的区块链技术主要应用在行业特征明显的联盟链、私有链上。
使用者: PoA、 Ethereum Kovantestnet、 xDai、 VeChain 和沃尔玛的物流链。
算法原理:
a. 选择权威证明者;
b.由若干个验证人来生成区块记录交易,并获得区块奖励和交易费用。在 PoA中,验证者是整个共识机制的关键,验证者通过放置这个身份来获得担保网络的权利,从而换取区块奖励。若是验证者在整个过程中有恶意行为,或与其他验证者勾结,那通过链上管理可以移除和替换恶意行为者。现有的法律反欺诈保障会被用于整个网络的参与者免受验证者的恶意行为。
优点:
a. 需要更少的算力,不需要挖矿,节能环保;
b. 验证速度快,支持更快的事务;
c. 整个网络验证者互相监督,随时可以投票加入心得验证者或者剔除不合格验证者
d. 硬分叉受法律保护,每个 Validator 均签订法律协议。
缺点:
a. 公开身份,隐私和匿名性将减少
b. 验证人特定为法律支持的集中的权威节点
7. 延迟工作量证明(Delayed Proof-of-Work, dPoW)
算法简介: 解释DPoW前,需要先说明什么叫PoB。PoB(Proof of Burn)叫做焚烧证明机制,是一种通过焚烧自己手中的代币来表决谁拥有对网络的领导地位的承诺。焚烧代币的数量越多,获得网络领导地位的概率越高。
在基于dPoW的区块链中,矿工挖矿所获得的不再是奖励的代币,而是可以焚烧的“wood”——燃木。矿工使用自己的算力,通过哈希算法,最终证明自己的工作量之后,获取对应的wood,wood不可交易。当wood积攒到一定量之后,可以前往燃烧场地燃烧wood。
通过一组算法计算后,燃烧较多wood的人或者BP或者一组BP可以获取下个事件段出块的权利,成功出块后获取奖励(Token)。由于一个时间段内可能会有多人燃烧wood,下一个时间段出块的概率由自己燃烧wood数量决定。焚烧的越多,下一段时间可以获得出块权利的概率越高。
这样可以让算力和出矿权利达到一个平衡。不一定非要庞大算力的矿工、矿池才能成为区块生产者。小矿工也有春天,只要辛勤劳动,积攒一定数量的wood,也能出块。保证效率,人人参与,最平民化的参与方式保证了去中心化的理念,避免拥有算力的组织或者持币大户把持网络。
使用者:Komodo
算法原理:dPoW 系统中有两种类型的节点:公证人节点和正常节点。64 个公证人节点是由 dPoW 区块链的权益持有者(stakeholder)选举产生的,它们可从 dPoW 区块链向所附加的 PoW 区块链添加经公证确认的块。一旦添加了一个块,该块的哈希值将被添加到由 33 个公证人节点签署的 Bitcoin 交易中,并创建一个哈希到 Bitcoin 区块链的 dPow 块记录。该记录已被网络中的大多数公证人节点公证。
为避免公证人节点间在挖矿上产生战争,进而降低网络的效率,Komodo 设计了一种采用轮询机制的挖矿方法,该方法具有两种运行模式。
在“无公证人”(No Notary)模式下,支持所有网络节点参与挖矿,这类似于传统 PoW 共识机制。而在“公证人激活”(Notaries Active)模式下,网络公证人使用一种显著降低的网络难度率挖矿。“公证人激活”模式下,允许每位公证人使用其当前的难度挖掘一个区块,而其它公证人节点必须采用 10 倍难度挖矿,所有正常节点使用公证人节点难度的 100 倍挖矿。
优点:节能;安全性增加;可以通过非直接提供 Bitcoin(或是其它任何安全链),添加价值到其它区块链,无需付出 Bitcoin(或是其它任何安全链)交易的代价。
缺点:只有使用PoW或PoS的区块链,才能采用这种共识算法;在“公证员激活”(Notaries Active)模式下,必须校准不同节点(公证员或正常节点)的哈希率,否则哈希率间的差异会爆炸。
8. 授权 PoS(DPoS,Delegated Proof-of-Stake)
算法简介:DPoS机制,又叫做「股份授权证明机制」和「受托人机制」,是2014年4月由Bitshares 的首席开发者 Dan Larimer(BM)提出的。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。
为了方便理解,可以再举个例子。想象有这样一家公司:公司员工总数有1000人,每个人都持有数额不等的公司股份。每隔一段时间,员工可以把手里的票投向自己最认可的10个人来领导公司,其中每个员工的票权和他手里持有的股份数成正比。等所有人投完票以后,得票率最高的10个人成为公司的领导。
如果有领导能力不胜任或做了不利于公司的事,那员工可以撤销对该领导的投票,让他的得票率无法进入前10名,从而退出管理层。
使用者:BitShares、Steemit、EOS、Lisk、Ark。
优点:节能;快速;高流量博客网站 Steemit 就使用了它。EOS 的块时间是 0.5 秒。
缺点:略中心化;拥有高权益的参与者可投票使自己成为一名验证者(这是近期已在 EOS 中出现的问题)。
9. 实用拜占庭容错(Practical Byzantine Fault Tolerance, PBFT)
算法简介:PBFT 算法中,有一个节点会被当做主节点,而其他节点都是备份节点。系统内的所有节点都会相互通信,最终目标是大家能以少数服从多数的原则达成共识。
共识过程:
a. 客户端发送一个请求给主节点去执行某个操作
b. 主节点广播这个请求到各个备份节点
c. 所有节点执行操作并把结果返回客户端
d. 当客户端收到 f+1个来自不同节点的相同的结果后,过程结束。f 代表可能撒谎的节点的最大值。
使用者: HyperLedgerFabric, Stellar, Ripple, Dispatch
优点:高速、可扩展。
缺点:通常用于私有网络和许可网络。
10. 授权拜占庭容错(dBFTDelegated Byzantine Fault Tolerance,dBFT)
算法简介:中国区块链社区 NEO (原名小蚁) 提出一种改进的拜占 庭容错算法 dBFT, 该算法在 PBFT 的基础上借鉴 了 PoS 设计思路, 首先按照节点的权益来选出记账 人, 然后记账人之间通过拜占庭容错算法来达成共识。 该算法改进了 PoW 和 PoS 缺乏最终一致性的 问题, 使得区块链能够适用于金融场景。
同样是为了解决拜占庭将军问题,「授权拜占庭容错」机制,是一种在NEO区块链内部实现的保证容错的共识算法。在这个机制当中,存在两个参与者,一个是专业记账的“记账节点”,一个是系统当中的普通用户。
普通用户基于持有权益的比例来投票决定记账节点,当需要通过一项共识时,在这些记账节点中随机推选出一名发言人拟定方案,然后由其他记账节点根据拜占庭容错算法,即少数服从多数的原则进行表态,如果超过66%的节点表示同意发言人方案,则共识达成;否则,重新推选发言人,重复投票过程。
由于所有代表都可以验证区块提案,因此很容易理解议长发送的数据是有效还是无效。因此,如果议长不诚实并向三分之二的代表发送无效提案,则块将不匹配,节点所有者将不会对其进行验证。以三分之二的票数达成共识,并选出新的议长。
使用者:Neo
共识过程:
a. 任何人都可以成为代表,只要他或她符合要求。所有 NEO 代币持有者都可以投票,代表不是匿名的,并且成为节点所有者需要 1,000 GAS。
b. 从代表中随机选出一名发言人。
c. 发言人从等待验证的交易中构建一个新区块。然后,议长将提案发送给当选的代表。他们应该跟踪所有交易并将它们记录在网络上。
d. 代表们可以自由分享和比较他们收到的提案,以测试数据的准确性以及演讲者的诚实度。如果超过三分之二的代表达成共识并验证,则该区块被添加到区块链中。
优点:快速(生成一个块需要15-20秒);交易吞吐量大,无需消耗能量,可扩展,没有分叉。
缺点:没有匿名性,需要真实身份运作才能被选举。每个人都争相成为根链。其中可能存在多个根链。
11. 轮流拜占庭容错(Rotation Practical Byzantine Fault Tolerance, RBPFT)
算法简介:dBft 和 RPBFT 原理和 PBFT 相似,只是不是所有的节点都参与共识,而是将节点分为两种:
a. 共识节点:执行 PBFT 共识流程的节点,有轮流出块的权限
b. 验证节点:不执行共识流程,验证共识节点是否合法、区块验证,经过若干轮共识后,会切换为共识节点
轮流拜占庭容错中轮流将共识节点替换为验证节点。
使用案例:Fisco-BCOS
优点:传播速度比gossip快,无冗余消息包
分而治之,每个节点出带宽为O(1),可扩展性强
缺点:中间节点是单点,需要额外的容错策略
12. AptosBFT
算法简介:也是 PBFT 的衍生算法,Aptos 以名字命名的共识算法,基于 HotStuff, 而HotStuff 又基于 PBFT。这个算法模型优点像洋葱和俄罗斯套娃,需要一层一层剥开。每个节点只与领导者通信,而不是向领导者和其他所有“将军”发送消息。领导者广播要投票的消息(建议的块);每个节点将其投票发送给收集消息的领导者。
使用案例:Aptos
最后,附上本部分大总结:
此外,还有一些不常见的共识算法。
2015 年, Stellar.org 首 席 科 学 官 David Mazieres 教授提出了恒星共识协议 (Stellar consensus protocol, SCP). SCP 在联邦拜占庭协议 和 Ripple 协议的基础上演化而来的, 是第一个可证 明安全的共识机制, 具有分散控制、低延迟、灵活信 任和渐近安全 4 个关键属性。
同年, 超级账本的锯齿湖项目将 Ripple 和 SCP 共识相结合, 提出了法定人数投票 (Quorum voting) 共识算法, 以应对那 些需要即时交易最终性的应用场景。
2016 年, 图灵奖得主、MIT 教授 Sivio Micali 提出了一种称为 AlgoRand的快速拜占庭容错共 识算法. 该算法利用密码抽签技术选择共识过程的 验证者和领导者, 并通过其设计的 BA* 拜占庭容错协议对新区块达成共识. AlgoRand 只需极小计算 量且极少分叉, 被认为是真正民主和高效的分布式账本共识技术。
2017 年, 康奈尔大学提出了一种称为 Sleepy Consensus (休眠共识) 的新算法. 这种共识针对 的是互联网环境下大规模的共识节点中可能多数都 处于离线状态, 仅有少数节点在线参与共识过程的 实际情况。 该研究证明, 传统共识算法无法在这种环境下保证共识的安全性. 而采用休眠共识算法, 只要 在线诚实节点的数量超过故障节点的数量, 即可保 证安全性和鲁棒性。
总结
如果跳出开发者的角度,更多结合政治与经济的思考方式在里面,或许还会出现更多的共识算法,如结合类似PPP概念的共识方式,不仅能达到对恶意者的惩罚性质,还能达到最高效节约算力的目的也说不定。
总之,共识机制是区块链技术的核心,它可以解决分布式系统中的信任问题,确保各节点之间的数据一致性和安全性,避免了恶意节点的攻击和篡改,从而保证了区块链系统的稳定性和可信度。同时,共识机制还可以解决“双花”问题,提高区块链系统的吞吐量和处理速度。但是各种共识算法并不是绝对安全,高效,去中心化的。
没有最好的算法,只有最适合自己的算法。共识算法的选择与应用场景高度相关,可信环境使用Paxos 或者RAFT,带许可的联盟可使用PBFT ,非许可链可以是PoW,PoS,Ripple共识等。最好的共识机制永远是适合用户需求的机制。
Scan QR code with WeChat