本篇文章主要给网友们分享区块链共识算法流程图的知识,其中更加会对区域链共识算法进行更多的解释,如果能碰巧解决你现在面临的问题,记得关注本站!
区块链技术的六大核心算法
区块链核心算法一:拜占庭协定
拜占庭的故事大概是这么说的:拜占庭帝国拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其区块链共识算法流程图他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。
在这个分布式网络里:每个将军都有一份实时与其他将军同步的消息账本。账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些将军。尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。
由此,在一个分布式的系统中,尽管有坏人,坏人可以做任意事情(不受protocol限制),比如不响应、发送错误信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等等。但是,只要大多数人是好人,就完全有可能去中心化地实现共识
区块链核心算法二:非对称加密技术
在上述拜占庭协定中,如果10个将军中的几个同时发起消息,势必会造成系统的混乱,造成各说各的攻击时间方案,行动难以一致。谁都可以发起进攻的信息,但由谁来发出呢?其实这只要加入一个成本就可以区块链共识算法流程图了,即:一段时间内只有一个节点可以传播信息。当某个节点发出统一进攻的消息后,各个节点收到发起者的消息必须签名盖章,确认各自的身份。
在如今看来,非对称加密技术完全可以解决这个签名问题。非对称加密算法的加密和解密使用不同的两个密钥.这两个密钥就是我们经常听到的”公钥”和”私钥”。公钥和私钥一般成对出现, 如果消息使用公钥加密,那么需要该公钥对应的私钥才能解密; 同样,如果消息使用私钥加密,那么需要该私钥对应的公钥才能解密。
区块链核心算法三:容错问题
我们假设在此网络中,消息可能会丢失、损坏、延迟、重复发送,并且接受的顺序与发送的顺序不一致。此外,节点的行为可以是任意的:可以随时加入、退出网络,可以丢弃消息、伪造消息、停止工作等,还可能发生各种人为或非人为的故障。我们的算法对由共识节点组成的共识系统,提供的容错能力,这种容错能力同时包含安全性和可用性,并适用于任何网络环境。
区块链核心算法四:Paxos 算法(一致性算法)
Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。节点通信存在两种模型:共享内存和消息传递。Paxos算法就是一种基于消息传递模型的一致性算法。
区块链核心算法五:共识机制
区块链共识算法主要是工作量证明和权益证明。拿比特币来说,其实从技术角度来看可以把PoW看做重复使用的Hashcash,生成工作量证明在概率上来说是一个随机的过程。开采新的机密货币,生成区块时,必须得到所有参与者的同意,那矿工必须得到区块中所有数据的PoW工作证明。与此同时矿工还要时时观察调整这项工作的难度,因为对网络要求是平均每10分钟生成一个区块。
区块链核心算法六:分布式存储
分布式存储是一种数据存储技术,通过网络使用每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在网络中的各个角落。所以,分布式存储技术并不是每台电脑都存放完整的数据,而是把数据切割后存放在不同的电脑里。就像存放100个鸡蛋,不是放在同一个篮子里,而是分开放在不同的地方,加起来的总和是100个。
在异步系统中,需要主机之间进行状态复制,以保证每个主机达成一致的状态共识。而在异步系统中,主机之间可能出现故障,因此需要在默认不可靠的异步网络中定义容错协议,以确保各个主机达到安全可靠的状态共识。
共识算法其实就是一组规则,设置一组条件,筛选出具有代表性的节点。在区块链系统中,存在很多这样的筛选方案,如在公有链中的POW、Pos、DPOS等,而在不需要货币体系的许可链或私有链中,绝对信任的节点、高效的需求是公有链共识算法不能提供的,对于这样的区块链,传统的一致性共识算法成为首选,如PBFT、PAXOS、RAFT等。
目录
一、BFT(拜占庭容错技术)
二、PBFT(实用拜占庭容错算法)
三、PAXOS
四、Raft
五、POW(工作量证明)
六、POS(权益证明)
七、DPOS(委任权益证明)
八、Ripple
拜占庭弄错技术是一类分布式计算领域的容错技术。拜占庭假设是由于硬件错误、网络拥塞或中断以及遭到恶意攻击的原因,计算机和网络出现不可预测的行为。拜占庭容错用来处理这种异常行为,并满足所要解决问题的规范。
拜占庭容错系统是一个拥有n台节点的系统,整个系统对于每一个请求,满足以下条件:
1)所有非拜占庭节点使用相同的输入信息,产生同样的结果;
2)如果输入的信息正确,那么所有非拜占庭节点必须接收这个信息,并计算相应的结果。
拜占庭系统普遍采用的假设条件包括:
1)拜占庭节点的行为可以是任意的,拜占庭节点之间可以共谋;
2)节点之间的错误是不相关的;
3)节点之间通过异步网络连接,网络中的消息可能丢失、乱序并延时到达,但大部分协议假设消息在有限的时间里能传达到目的地;
4)服务器之间传递的信息,第三方可以嗅探到,但是不能篡改、伪造信息的内容和验证信息的完整性。
拜占庭容错由于其理论上的可行性而缺乏实用性,另外还需要额外的时钟同步机制支持,算法的复杂度也是随节点的增加而指数级增加。
实用拜占庭容错降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别。
PBFT是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。PBFT要求共同维护一个状态。需要运行三类基本协议,包括一致性协议、检查点协议和视图更换协议。
一致性协议。一致性协议至少包含若干个阶段:请求(request)、序号分配(pre-prepare)和响应(reply),可能包含相互交互(prepare),序号确认(commit)等阶段。
PBFT通信模式中,每个客户端的请求需要经过5个阶段。由于客户端不能从服务器端获得任何服务器运行状态的信息,PBFT中主节点是否发生错误只能由服务器监测。如果服务器在一段时间内都不能完成客户端的请求,则会触发视图更换协议。
整个协议的基本过程如下:
1)客户端发送请求,激活主节点的服务操作。
2)当主节点接收请求后,启动三阶段的协议以向各从节点广播请求。
[2.1]序号分配阶段,主节点给请求赋值一个序列号n,广播序号分配消息和客户端的请求消息m,并将构造PRE-PREPARE消息给各从节点;
[2.2]交互阶段,从节点接收PRE-PREPARE消息,向其他服务节点广播PREPARE消息;
[2.3]序号确认阶段,各节点对视图内的请求和次序进行验证后,广播COMMIT消息,执行收到的客户端的请求并给客户端以响应。
3)客户端等待来自不同节点的响应,若有m+1个响应相同,则该响应即为运算的结果。
PBFT一般适合有对强一致性有要求的私有链和联盟链,例如,在IBM主导的区块链超级账本项目中,PBFT是一个可选的共识协议。在Hyperledger的Fabric项目中,共识模块被设计成可插拔的模块,支持像PBFT、Raft等共识算法。
在有些分布式场景下,其假设条件不需要考虑拜占庭故障,而只是处理一般的死机故障。在这种情况下,采用Paxos等协议会更加高效。。PAXOS是一种基于消息传递且具有高度容错特性的一致性算法。
PAXOS中有三类角色Proposer、Acceptor及Learner,主要交互过程在Proposer和Acceptor之间。算法流程分为两个阶段:
phase 1
a) proposer向网络内超过半数的acceptor发送prepare消息
b) acceptor正常情况下回复promise消息
phase 2
a) 在有足够多acceptor回复promise消息时,proposer发送accept消息
b) 正常情况下acceptor回复accepted消息
流程图如图所示:
PAXOS协议用于微信PaxosStore中,每分钟调用Paxos协议过程数十亿次量级。
Paxos是Lamport设计的保持分布式系统一致性的协议。但由于Paxos非常复杂,比较难以理解,因此后来出现了各种不同的实现和变种。Raft是由Stanford提出的一种更易理解的一致性算法,意在取代目前广为使用的Paxos算法。
Raft最初是一个用于管理复制日志的共识算法,它是在非拜占庭故障下达成共识的强一致协议。Raft实现共识过程如下:首先选举一个leader,leader从客户端接收记账请求、完成记账操作、生成区块,并复制到其他记账节点。leader有完全的管理记账权利,例如,leader能够决定是否接受新的交易记录项而无需考虑其他的记账节点,leader可能失效或与其他节点失去联系,这时,重新选出新的leader。
在Raft中,每个节点会处于以下三种状态中的一种:
(1)follower:所有结点都以follower的状态开始。如果没收到leader消息则会变成candidate状态;
(2)candidate:会向其他结点“拉选票”,如果得到大部分的票则成为leader。这个过程就叫做Leader选举(Leader Election);
(3)leader:所有对系统的修改都会先经过leader。每个修改都会写一条日志(log entry)。leader收到修改请求后的过程如下:此过程叫做日志复制(Log Replication)
1)复制日志到所有follower结点
2)大部分结点响应时才提交日志
3)通知所有follower结点日志已提交
4)所有follower也提交日志
5)现在整个系统处于一致的状态
Raft阶段主要分为两个,首先是leader选举过程,然后在选举出来的leader基础上进行正常操作,比如日志复制、记账等。
(1)leader选举
当follower在选举时间内未收到leader的消息,则转换为candidate状态。在Raft系统中:
1)任何一个服务器都可以成为候选者candidate,只要它向其他服务器follower发出选举自己的请求。
2)如果其他服务器同意了,发出OK。如果在这个过程中,有一个follower宕机,没有收到请求选举的要求,此时候选者可以自己选自己,只要达到N/2+1的大多数票,候选人还是可以成为leader的。
3)这样这个候选者就成为了leader领导人,它可以向选民也就是follower发出指令,比如进行记账。
4)以后通过心跳消息进行记账的通知。
5)一旦这个leader崩溃了,那么follower中有一个成为候选者,并发出邀票选举。
6)follower同意后,其成为leader,继续承担记账等指导工作。
(2)日志复制
记账步骤如下所示:
1)假设leader已经选出,这时客户端发出增加一个日志的要求;
2)leader要求follower遵从他的指令,将这个新的日志内容追加到各自日志中;
3)大多数follower服务器将交易记录写入账本后,确认追加成功,发出确认成功信息;
4)在下一个心跳消息中,leader会通知所有follower更新确认的项目。
对于每个新的交易记录,重复上述过程。
在这一过程中,若发生网络通信故障,使得leader不能访问大多数follower了,那么leader只能正常更新它能访问的那些follower服务器。而大多数的服务器follower因为没有了leader,他们将重新选举一个候选者作为leader,然后这个leader作为代表与外界打交道,如果外界要求其添加新的交易记录,这个新的leader就按上述步骤通知大多数follower。当网络通信恢复,原先的leader就变成follower,在失联阶段,这个老leader的任何更新都不能算确认,必须全部回滚,接收新的leader的新的更新。
在去中心账本系统中,每个加入这个系统的节点都要保存一份完整的账本,但每个节点却不能同时记账,因为节点处于不同的环境,接收不同的信息,如果同时记账,必然导致账本的不一致。因此通过同时来决定那个节点拥有记账权。
在比特币系统中,大约每10分钟进行一轮算力竞赛,竞赛的胜利者,就获得一次记账的权力,并向其他节点同步新增账本信息。
PoW系统的主要特征是计算的不对称性。工作端要做一定难度的工作才能得出一个结果,而验证方却很容易通过结果来检查工作端是不是做了相应的工作。该工作量的要求是,在某个字符串后面连接一个称为nonce的整数值串,对连接后的字符串进行SHA256哈希运算,如果得到的哈希结果(以十六进制的形式表示)是以若干个0开头的,则验证通过。
比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的PoW问题。关键的3个要素是 工作量证明函数、区块及难度值 。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题所需要的计算量。
(1)工作量证明函数就是u style="box-sizing: border-box;" SHA256 /u
比特币的区块由区块头及该区块所包含的交易列表组成。拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。
(2)难度的调整是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统一的公式自动调整难度。如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。
公式可以总结为:新难度值=旧难度值×(过去2016个区块花费时长/20160分钟)
工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式:目标值=最大目标值/难度值
其中最大目标值为一个恒定值:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的 区块哈希值必须小于目标值 。
(3)PoW能否解决拜占庭将军问题
比特币的PoW共识算法是一种概率性的拜占庭协议(Probabilistic BA)
当不诚实的算力小于网络总算力的50%时,同时挖矿难度比较高(在大约10分钟出一个区块情况下)比特币网络达到一致性的概念会随确认区块的数目增多而呈指数型增加。但当不诚实算力具一定规模,甚至不用接近50%的时候,比特币的共识算法并不能保证正确性,也就是,不能保证大多数的区块由诚实节点来提供。
比特币的共识算法不适合于私有链和联盟链。其原因首先是它是一个最终一致性共识算法,不是一个强一致性共识算法。第二个原因是其共识效率低。
扩展知识: 一致性
严格一致性,是在系统不发生任何故障,而且所有节点之间的通信无需任何时间这种理想的条件下,才能达到。这个时候整个系统就等价于一台机器了。在现实中,是不可能达到的。
强一致性,当分布式系统中更新操作完成之后,任何多个进程或线程,访问系统都会获得最新的值。
弱一致性,是指系统并不保证后续进程或线程的访问都会返回最新的更新的值。系统在数据成功写入之后,不承诺立即可以读到最新写入的值,也不会具体承诺多久读到。但是会尽可能保证在某个时间级别(秒级)之后。可以让数据达到一致性状态。
最终一致性是弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。也就是说,如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
在股权证明PoS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个PoS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(假定利息可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息。
点点币(Peercoin)是首先采用权益证明的货币。,点点币的权益证明机制结合了随机化与币龄的概念,未使用至少30天的币可以参与竞争下一区块,越久和越大的币集有更大的可能去签名下一区块。一旦币的权益被用于签名一个区块,则币龄将清为零,这样必须等待至少30日才能签署另一区块。
PoS机制虽然考虑到了PoW的不足,但依据权益结余来选择,会导致首富账户的权力更大,有可能支配记账权。股份授权证明机制(Delegated Proof of Stake,DPoS)的出现正是基于解决PoW机制和PoS机制的这类不足。
比特股(Bitshare)是一类采用DPoS机制的密码货币。它的原理是,让每一个持有比特股的人进行投票,由此产生101位代表 , 我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利是完全相等的。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。
比特股引入了见证人这个概念,见证人可以生成区块,每一个持有比特股的人都可以投票选举见证人。得到总同意票数中的前N个(N通常定义为101)候选者可以当选为见证人,当选见证人的个数(N)需满足:至少一半的参与投票者相信N已经充分地去中心化。
见证人的候选名单每个维护周期(1天)更新一次。见证人然后随机排列,每个见证人按序有2秒的权限时间生成区块,若见证人在给定的时间片不能生成区块,区块生成权限交给下一个时间片对应的见证人。
比特股还设计了另外一类竞选,代表竞选。选出的代表拥有提出改变网络参数的特权,包括交易费用、区块大小、见证人费用和区块区间。若大多数代表同意所提出的改变,持股人有两周的审查期,这期间可以罢免代表并废止所提出的改变。这一设计确保代表技术上没有直接修改参数的权利以及所有的网络参数的改变最终需得到持股人的同意。
Ripple(瑞波)是一种基于互联网的开源支付协议,在Ripple的网络中,交易由客户端(应用)发起,经过追踪节点(tracking node)或验证节点(validating node)把交易广播到整个网络中。
追踪节点的主要功能是分发交易信息以及响应客户端的账本请求。验证节点除包含追踪节点的所有功能外,还能够通过共识协议,在账本中增加新的账本实例数据。
Ripple的共识达成发生在验证节点之间,每个验证节点都预先配置了一份可信任节点名单,称为UNL(Unique Node List)。在名单上的节点可对交易达成进行投票。每隔几秒,Ripple网络将进行如下共识过程:
1)每个验证节点会不断收到从网络发送过来的交易,通过与本地账本数据验证后,不合法的交易直接丢弃,合法的交易将汇总成交易候选集(candidate set)。交易候选集里面还包括之前共识过程无法确认而遗留下来的交易。
2)每个验证节点把自己的交易候选集作为提案发送给其他验证节点。
3)验证节点在收到其他节点发来的提案后,如果不是来自UNL上的节点,则忽略该提案;如果是来自UNL上的节点,就会对比提案中的交易和本地的交易候选集,如果有相同的交易,该交易就获得一票。在一定时间内,当交易获得超过50%的票数时,则该交易进入下一轮。没有超过50%的交易,将留待下一次共识过程去确认。
4)验证节点把超过50%票数的交易作为提案发给其他节点,同时提高所需票数的阈值到60%,重复步骤3)、步骤4),直到阈值达到80%。
5)验证节点把经过80%UNL节点确认的交易正式写入本地的账本数据中,称为最后关闭账本(Last Closed Ledger),即账本最后(最新)的状态。
在Ripple的共识算法中,参与投票节点的身份是事先知道的。该共识算法只适合于权限链(Permissioned chain)的场景。Ripple共识算法的拜占庭容错(BFT)能力为(n-1)/5,即可以容忍整个网络中20%的节点出现拜占庭错误而不影响正确的共识。
在区块链网络中,由于应用场景的不同,所设计的目标各异,不同的区块链系统采用了不同的共识算法。一般来说,在私有链和联盟链情况下,对一致性、正确性有很强的要求。一般来说要采用强一致性的共识算法。而在公有链情况下,对一致性和正确性通常没法做到百分之百,通常采用最终一致性(Eventual Consistency)的共识算法。
共识算法的选择与应用场景高度相关,可信环境使用paxos 或者raft,带许可的联盟可使用pbft ,非许可链可以是pow,pos,ripple共识等,根据对手方信任度分级,自由选择共识机制。
关于区块链技术的一些讲解和知识点分析我们已经给大家分享过很多次了。今天,丽江java课程就再来了解一下,区块链技术中的共识算法的一些基本定义与特点。
简单过一下区块链
我们一般意识形态中的链是铁链,由铁铸成,一环扣一环。形象地,区块链的也可以这么理解,只不过它不是由铁铸成,而是由拥有一定数据结构的块连接而成,这是一个简单的雏形
通俗讲解共识
所谓共识,通俗来说,就是我们大家对某种事物的理解达成一致的意思。比如说日常的开会讨论问题,又比如判断一个动物是不是猫,我们肉眼看了后觉得像猫,其满足猫的特征,那么我们认为它是猫。共识,是一种规则。
继续我们的会议例子。参与会议的人,通过开会的方式来达到谈论解决问题。
对比区块链中,参与挖矿的矿工通过某种共识方式(算法)来解决让自己的账本跟其他节点的账本保持一致。让账本保持一致的深入一层意思就是,让链中区块信息保持一致。
为什么需要共识,不需要可不可以?当然不可以,生活中没了共识的规则,一切乱套。区块链没了共识的规则,各个节点各干各的,失去一致的意义。
这两个例子的对应的关系如下:
会议的人=挖矿的矿工
开会=共识方式(算法)
谈论解决问题=让自己的账本跟其他节点的账本保持一致
如果你对节点的概念意思不懂,请先理解为矿工,一个节点内部包含很多角色,矿工是其中之一。
共识算法
目前常见的在区块链中,节点们让自己的账本跟其他节点的账本保持一致的共识方式(算法)有如下几种:
PoW,代表者是比特币(BTC)
弊端:
矿池的出现,一定程度上违背了去中心化的初衷,同时也使得51%攻击成为可能,影响其安全性。
存在巨大的算力浪费,看看矿池消耗大量的电力资源,随着难度增加,挖出的不够付电费
PoS,代表者是以太坊(ETH),从PoW过度到PoS
弊端:
破坏者对网络的攻击成本很低,拥有代币就能竞争
另外拥有代币数量大的节点获得记账权的概率会更大,会使得网络共识受少数富裕账户支配,从而失去公正性。
POA全称是proof of activity。他不是一种独立的共识算法,而是POW和POS混合的算法,目前有唯链,欧链等采用了POA共识机制。
POA的算法大致流程是这样的,每个活跃节点不断的进行哈希计算,寻找哈希值小于特定值的区块头,区块头中包括前区块哈希值,本地节点的地址,区块序号以及nonce值。当节点找到满足条件的区块头后,就会向全网广播这个区块头,所有的活跃节点收到广播进行验证。若验证通过,则以广播中的区块头作为数据源,导出N个随机的股权所有者,所有的活跃节点判断自己是否是哪个幸运的股权人。如果自己是前面N-1个幸运股权人中的一个,也一度用私钥对上述的区块头进行签名。并且将这个签名在全网广播。如果自己是第N个幸运股权持有者,则用这个区块头来构建一个新的区块,区块中包含了自己选出的尽可能多的交易,前N-1个幸运股权人的签名还有自己对完整区块链的哈希值的签名。然后将这个签名后的完整节点在全网广播。所有的活跃节点在收到完整节点之后进行验证。验证通过则认为该节点是一个合法的新区块。将其加入区块链当中去。
倘若这个区块属于最长链,则以他为前区块,转回到最初的步骤,否则就做丢弃处理。不难发现,POA算法要求N个幸运者全部在线,任意一个幸运股权人不在线都将导致该区块丢弃。
这也是活跃证明的由来,POA算法会周期性的统计被丢弃的区块数量。并且按照这个来调整N的数值。如果丢弃的区块数量比较多,那么就减少N,否则就增大N.
POA算法的区块丢失是一种算力损失。POA算法中。区块中的交易费由区块的发布者与n个幸运股权人共享。
POA算法最重要的是它可以防止非厉害攻击者。所谓的非厉害攻击是指具有强大的算法,但是仅仅持有少量的股权的攻击者。POA算法中POS部分使得非厉害者得到构建区块机会是非常少的。应该我们无法有效的进行攻击。
POA算法中,幸运股权人依靠资本获利,这个想当持有股篇而获得股息,这种机制会估计持股人长期持续这个股权有利于数字资产的保值以及减少波动。
POAstay大众的pow部分,通过哈希算法难度控制了新区块头生成的速度。起到稳定网络,避免分叉的作用。
然而上述优点的获得也是有代价的,pow部分带来的电力的损耗。而pos部分导致新区块头以及比较大的概率丢失,形成了算力的浪费。
一、区块链共识机制的目标
区块链是什么?简单而言,区块链是一种去中心化的数据库,或可以叫作分布式账本(distributed ledger)。传统上所有的数据库都是中心化的,例如一间银行的账本就储存在银行的中心服务器里。中心化数据库的弊端是数据的安全及正确性全系于数据库运营方(即银行),因为任何能够访问中心化数据库的人(如银行职员或黑客)都可以破坏或修改其中的数据。
而区块链技术则容许数据库存放在全球成千上万的电脑上,每个人的账本通过点对点网络进行同步,网络中任何用户一旦增加一笔交易,交易信息将通过网络通知其他用户验证,记录到各自的账本中。区块链之所以得其名是因为它是由一个个包含交易信息的区块(block)从后向前有序链接起来的数据结构。
很多人对区块链的疑问是,如果每一个用户都拥有一个独立的账本,那么是否意味着可以在自己的账本上添加任意的交易信息,而成千上万个账本又如何保证记账的一致性? 解决记账一致性问题正是区块链共识机制的目标 。区块链共识机制旨在保证分布式系统里所有节点中的数据完全相同并且能够对某个提案(proposal)(例如是一项交易纪录)达成一致。然而分布式系统由于引入了多个节点,所以系统中会出现各种非常复杂的情况;随着节点数量的增加,节点失效或故障、节点之间的网络通信受到干扰甚至阻断等就变成了常见的问题,解决分布式系统中的各种边界条件和意外情况也增加了解决分布式一致性问题的难度。
区块链又可分为三种:
公有链:全世界任何人都可以随时进入系统中读取数据、发送可确认交易、竞争记账的区块链。公有链通常被认为是“完全去中心化“的,因为没有任何人或机构可以控制或篡改其中数据的读写。公有链一般会通过代币机制鼓励参与者竞争记账,来确保数据的安全性。
联盟链:联盟链是指有若干个机构共同参与管理的区块链。每个机构都运行着一个或多个节点,其中的数据只允许系统内不同的机构进行读写和发送交易,并且共同来记录交易数据。这类区块链被认为是“部分去中心化”。
私有链:指其写入权限是由某个组织和机构控制的区块链。参与节点的资格会被严格的限制,由于参与的节点是有限和可控的,因此私有链往往可以有极快的交易速度、更好的隐私保护、更低的交易成本、不容易被恶意攻击、并且能够做到身份认证等金融行业必须的要求。相比中心化数据库,私有链能够防止机构内单节点故意隐瞒或篡改数据。即使发生错误,也能够迅速发现来源,因此许多大型金融机构在目前更加倾向于使用私有链技术。
二、区块链共识机制的分类
解决分布式一致性问题的难度催生了数种共识机制,它们各有其优缺点,亦适用于不同的环境及问题。被众人常识的共识机制有:
l PoW(Proof of Work)工作量证明机制
l PoS(Proof of Stake)股权/权益证明机制
l DPoS(Delegated Proof of Stake)股份授权证明机制
l PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法
l DBFT(Delegated Byzantine Fault Tolerance)授权拜占庭容错算法
l SCP (Stellar Consensus Protocol ) 恒星共识协议
l RPCA(Ripple Protocol Consensus Algorithm)Ripple共识算法
l Pool验证池共识机制
(一)PoW(Proof of Work)工作量证明机制
1. 基本介绍
在该机制中,网络上的每一个节点都在使用SHA256哈希函数(hash function) 运算一个不断变化的区块头的哈希值 (hash sum)。 共识要求算出的值必须等于或小于某个给定的值。 在分布式网络中,所有的参与者都需要使用不同的随机数来持续计算该哈希值,直至达到目标为止。当一个节点的算出确切的值,其他所有的节点必须相互确认该值的正确性。之后新区块中的交易将被验证以防欺诈。
在比特币中,以上运算哈希值的节点被称作“矿工”,而PoW的过程被称为“挖矿”。挖矿是一个耗时的过程,所以也提出了相应的激励机制(例如向矿工授予一小部分比特币)。PoW的优点是完全的去中心化,其缺点是消耗大量算力造成了的资源浪费,达成共识的周期也比较长,共识效率低下,因此其不是很适合商业使用。
2. 加密货币的应用实例
比特币(Bitcoin) 及莱特币(Litecoin)。以太坊(Ethereum) 的前三个阶段(Frontier前沿、Homestead家园、Metropolis大都会)皆采用PoW机制,其第四个阶段 (Serenity宁静) 将采用权益证明机制。PoW适用于公有链。
PoW机制虽然已经成功证明了其长期稳定和相对公平,但在现有框架下,采用PoW的“挖矿”形式,将消耗大量的能源。其消耗的能源只是不停的去做SHA256的运算来保证工作量公平,并没有其他的存在意义。而目前BTC所能达到的交易效率为约5TPS(5笔/秒),以太坊目前受到单区块GAS总额的上限,所能达到的交易频率大约是25TPS,与平均千次每秒、峰值能达到万次每秒处理效率的VISA和MASTERCARD相差甚远。
3. 简图理解模式
(ps:其中A、B、C、D计算哈希值的过程即为“挖矿”,为了犒劳时间成本的付出,机制会以一定数量的比特币作为激励。)
(Ps:PoS模式下,你的“挖矿”收益正比于你的币龄(币的数量*天数),而与电脑的计算性能无关。我们可以认为任何具有概率性事件的累计都是工作量证明,如淘金。假设矿石含金量为p% 质量, 当你得到一定量黄金时,我们可以认为你一定挖掘了1/p 质量的矿石。而且得到的黄金数量越多,这个证明越可靠。)
(二)PoS(Proof of Stake)股权/权益证明机制
1.基本介绍
PoS要求人们证明货币数量的所有权,其相信拥有货币数量多的人攻击网络的可能性低。基于账户余额的选择是非常不公平的,因为单一最富有的人势必在网络中占主导地位,所以提出了许多解决方案。
在股权证明机制中,每当创建一个区块时,矿工需要创建一个称为“币权”的交易,这个交易会按照一定比例预先将一些币发给矿工。然后股权证明机制根据每个节点持有代币的比例和时间(币龄), 依据算法等比例地降低节点的挖矿难度,以加快节点寻找随机数的速度,缩短达成共识所需的时间。
与PoW相比,PoS可以节省更多的能源,更有效率。但是由于挖矿成本接近于0,因此可能会遭受攻击。且PoS在本质上仍然需要网络中的节点进行挖矿运算,所以它同样难以应用于商业领域。
2.数字货币的应用实例
PoS机制下较为成熟的数字货币是点点币(Peercoin)和未来币(NXT),相比于PoW,PoS机制节省了能源,引入了" 币天 "这个概念来参与随机运算。PoS机制能够让更多的持币人参与到记账这个工作中去,而不需要额外购买设备(矿机、显卡等)。每个单位代币的运算能力与其持有的时间长成正相关,即持有人持有的代币数量越多、时间越长,其所能签署、生产下一个区块的概率越大。一旦其签署了下一个区块,持币人持有的币天即清零,重新进入新的循环。
PoS适用于公有链。
3.区块签署人的产生方式
在PoS机制下,因为区块的签署人由随机产生,则一些持币人会长期、大额持有代币以获得更大概率地产生区块,尽可能多的去清零他的"币天"。因此整个网络中的流通代币会减少,从而不利于代币在链上的流通,价格也更容易受到波动。由于可能会存在少量大户持有整个网络中大多数代币的情况,整个网络有可能会随着运行时间的增长而越来越趋向于中心化。相对于PoW而言,PoS机制下作恶的成本很低,因此对于分叉或是双重支付的攻击,需要更多的机制来保证共识。稳定情况下,每秒大约能产生12笔交易,但因为网络延迟及共识问题,需要约60秒才能完整广播共识区块。长期来看,生成区块(即清零"币天")的速度远低于网络传播和广播的速度,因此在PoS机制下需要对生成区块进行"限速",来保证主网的稳定运行。
4.简图理解模式
(PS:拥有越多“股份”权益的人越容易获取账权。是指获得多少货币,取决于你挖矿贡献的工作量,电脑性能越好,分给你的矿就会越多。)
(在纯POS体系中,如NXT,没有挖矿过程,初始的股权分配已经固定,之后只是股权在交易者之中流转,非常类似于现实世界的股票。)
(三)DPoS(Delegated Proof of Stake)股份授权证明机制
1.基本介绍
由于PoS的种种弊端,由此比特股首创的权益代表证明机制 DPoS(Delegated Proof of Stake)应运而生。DPoS 机制中的核心的要素是选举,每个系统原生代币的持有者在区块链里面都可以参与选举,所持有的代币余额即为投票权重。通过投票,股东可以选举出理事会成员,也可以就关系平台发展方向的议题表明态度,这一切构成了社区自治的基础。股东除了自己投票参与选举外,还可以通过将自己的选举票数授权给自己信任的其它账户来代表自己投票。
具体来说, DPoS由比特股(Bitshares)项目组发明。股权拥有着选举他们的代表来进行区块的生成和验证。DPoS类似于现代企业董事会制度,比特股系统将代币持有者称为股东,由股东投票选出101名代表, 然后由这些代表负责生成和验证区块。 持币者若想称为一名代表,需先用自己的公钥去区块链注册,获得一个长度为32位的特有身份标识符,股东可以对这个标识符以交易的形式进行投票,得票数前101位被选为代表。
代表们轮流产生区块,收益(交易手续费)平分。DPoS的优点在于大幅减少了参与区块验证和记账的节点数量,从而缩短了共识验证所需要的时间,大幅提高了交易效率。从某种角度来说,DPoS可以理解为多中心系统,兼具去中心化和中心化优势。优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。缺点:投票积极性不高,绝大部分代币持有者未参与投票;另整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。
DPoS机制要求在产生下一个区块之前,必须验证上一个区块已经被受信任节点所签署。相比于PoS的" 全民挖矿 ",DPoS则是利用类似" 代表大会 "的制度来直接选取可信任节点,由这些可信任节点(即见证人)来代替其他持币人行使权力,见证人节点要求长期在线,从而解决了因为PoS签署区块人不是经常在线而可能导致的产块延误等一系列问题。 DPoS机制通常能达到万次每秒的交易速度,在网络延迟低的情况下可以达到十万秒级别,非常适合企业级的应用。 因为公信宝数据交易所对于数据交易频率要求高,更要求长期稳定性,因此DPoS是非常不错的选择。
2. 股份授权证明机制下的机构与系统
理事会是区块链网络的权力机构,理事会的人选由系统股东(即持币人)选举产生,理事会成员有权发起议案和对议案进行投票表决。
理事会的重要职责之一是根据需要调整系统的可变参数,这些参数包括:
l 费用相关:各种交易类型的费率。
l 授权相关:对接入网络的第三方平台收费及补贴相关参数。
l 区块生产相关:区块生产间隔时间,区块奖励。
l 身份审核相关:审核验证异常机构账户的信息情况。
l 同时,关系到理事会利益的事项将不通过理事会设定。
在Finchain系统中,见证人负责收集网络运行时广播出来的各种交易并打包到区块中,其工作类似于比特币网络中的矿工,在采用 PoW(工作量证明)的比特币网络中,由一种获奖概率取决于哈希算力的抽彩票方式来决定哪个矿工节点产生下一个区块。而在采用 DPoS 机制的金融链网络中,通过理事会投票决定见证人的数量,由持币人投票来决定见证人人选。入选的活跃见证人按顺序打包交易并生产区块,在每一轮区块生产之后,见证人会在随机洗牌决定新的顺序后进入下一轮的区块生产。
3. DPoS的应用实例
比特股(bitshares) 采用DPoS。DPoS主要适用于联盟链。
4.简图理解模式
(四)PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法
1. 基本介绍
PBFT是一种基于严格数学证明的算法,需要经过三个阶段的信息交互和局部共识来达成最终的一致输出。三个阶段分别为预备 (pre-prepare)、准备 (prepare)、落实 (commit)。PBFT算法证明系统中只要有2/3比例以上的正常节点,就能保证最终一定可以输出一致的共识结果。换言之,在使用PBFT算法的系统中,至多可以容忍不超过系统全部节点数量1/3的失效节点 (包括有意误导、故意破坏系统、超时、重复发送消息、伪造签名等的节点,又称为”拜占庭”节点)。
2. PBFT的应用实例
著名联盟链Hyperledger Fabric v0.6采用的是PBFT,v1.0又推出PBFT的改进版本SBFT。PBFT主要适用于私有链和联盟链。
3. 简图理解模式
上图显示了一个简化的PBFT的协议通信模式,其中C为客户端,0 – 3表示服务节点,其中0为主节点,3为故障节点。整个协议的基本过程如下:
(1) 客户端发送请求,激活主节点的服务操作;
(2) 当主节点接收请求后,启动三阶段的协议以向各从节点广播请求;
(a) 序号分配阶段,主节点给请求赋值一个序号n,广播序号分配消息和客户端的请求消息m,并将构造pre-prepare消息给各从节点;
(b) 交互阶段,从节点接收pre-prepare消息,向其他服务节点广播prepare消息;
(c) 序号确认阶段,各节点对视图内的请求和次序进行验证后,广播commit消息,执行收到的客户端的请求并给客户端响应。
(3) 客户端等待来自不同节点的响应,若有m+1个响应相同,则该响应即为运算的结果;
(五)DBFT(Delegated Byzantine Fault Tolerance)授权拜占庭容错算法
1. 基本介绍
DBFT建基于PBFT的基础上,在这个机制当中,存在两种参与者,一种是专业记账的“超级节点”,一种是系统当中不参与记账的普通用户。普通用户基于持有权益的比例来投票选出超级节点,当需要通过一项共识(记账)时,在这些超级节点中随机推选出一名发言人拟定方案,然后由其他超级节点根据拜占庭容错算法(见上文),即少数服从多数的原则进行表态。如果超过2/3的超级节点表示同意发言人方案,则共识达成。这个提案就成为最终发布的区块,并且该区块是不可逆的,所有里面的交易都是百分之百确认的。如果在一定时间内还未达成一致的提案,或者发现有非法交易的话,可以由其他超级节点重新发起提案,重复投票过程,直至达成共识。
2. DBFT的应用实例
国内加密货币及区块链平台NEO是 DBFT算法的研发者及采用者。
3. 简图理解模式
假设系统中只有四个由普通用户投票选出的超级节点,当需要通过一项共识时,系统就会从代表中随机选出一名发言人拟定方案。发言人会将拟好的方案交给每位代表,每位代表先判断发言人的计算结果与它们自身纪录的是否一致,再与其它代表商讨验证计算结果是否正确。如果2/3的代表一致表示发言人方案的计算结果是正确的,那么方案就此通过。
如果只有不到2/3的代表达成共识,将随机选出一名新的发言人,再重复上述流程。这个体系旨在保护系统不受无法行使职能的领袖影响。
上图假设全体节点都是诚实的,达成100%共识,将对方案A(区块)进行验证。
鉴于发言人是随机选出的一名代表,因此他可能会不诚实或出现故障。上图假设发言人给3名代表中的2名发送了恶意信息(方案B),同时给1名代表发送了正确信息(方案A)。
在这种情况下该恶意信息(方案B)无法通过。中间与右边的代表自身的计算结果与发言人发送的不一致,因此就不能验证发言人拟定的方案,导致2人拒绝通过方案。左边的代表因接收了正确信息,与自身的计算结果相符,因此能确认方案,继而成功完成1次验证。但本方案仍无法通过,因为不足2/3的代表达成共识。接着将随机选出一名新发言人,重新开始共识流程。
上图假设发言人是诚实的,但其中1名代表出现了异常;右边的代表向其他代表发送了不正确的信息(B)。
在这种情况下发言人拟定的正确信息(A)依然可以获得验证,因为左边与中间诚实的代表都可以验证由诚实的发言人拟定的方案,达成2/3的共识。代表也可以判断到底是发言人向右边的节点说谎还是右边的节点不诚实。
(六)SCP (Stellar Consensus Protocol ) 恒星共识协议
1. 基本介绍
SCP 是 Stellar (一种基于互联网的去中心化全球支付协议) 研发及使用的共识算法,其建基于联邦拜占庭协议 (Federated Byzantine Agreement) 。传统的非联邦拜占庭协议(如上文的PBFT和DBFT)虽然确保可以通过分布式的方法达成共识,并达到拜占庭容错 (至多可以容忍不超过系统全部节点数量1/3的失效节点),它是一个中心化的系统 — 网络中节点的数量和身份必须提前知晓且验证过。而联邦拜占庭协议的不同之处在于它能够去中心化的同时,又可以做到拜占庭容错。
[…]
(七)RPCA(Ripple Protocol Consensus Algorithm)Ripple共识算法
1. 基本介绍
RPCA是Ripple(一种基于互联网的开源支付协议,可以实现去中心化的货币兑换、支付与清算功能)研发及使用的共识算法。在 Ripple 的网络中,交易由客户端(应用)发起,经过追踪节点(tracking node)或验证节点(validating node)把交易广播到整个网络中。追踪节点的主要功能是分发交易信息以及响应客户端的账本请求。验证节点除包含追踪节点的所有功能外,还能够通过共识协议,在账本中增加新的账本实例数据。
Ripple 的共识达成发生在验证节点之间,每个验证节点都预先配置了一份可信任节点名单,称为 UNL(Unique Node List)。在名单上的节点可对交易达成进行投票。共识过程如下:
(1) 每个验证节点会不断收到从网络发送过来的交易,通过与本地账本数据验证后,不合法的交易直接丢弃,合法的交易将汇总成交易候选集(candidate set)。交易候选集里面还包括之前共识过程无法确认而遗留下来的交易。
(2) 每个验证节点把自己的交易候选集作为提案发送给其他验证节点。
(3) 验证节点在收到其他节点发来的提案后,如果不是来自UNL上的节点,则忽略该提案;如果是来自UNL上的节点,就会对比提案中的交易和本地的交易候选集,如果有相同的交易,该交易就获得一票。在一定时间内,当交易获得超过50%的票数时,则该交易进入下一轮。没有超过50%的交易,将留待下一次共识过程去确认。
(4) 验证节点把超过50%票数的交易作为提案发给其他节点,同时提高所需票数的阈值到60%,重复步骤(3)、步骤(4),直到阈值达到80%。
(5) 验证节点把经过80%UNL节点确认的交易正式写入本地的账本数据中,称为最后关闭账本(last closed ledger),即账本最后(最新)的状态。
在Ripple的共识算法中,参与投票节点的身份是事先知道的,因此,算法的效率比PoW等匿名共识算法要高效,交易的确认时间只需几秒钟。这点也决定了该共识算法只适合于联盟链或私有链。Ripple共识算法的拜占庭容错(BFT)能力为(n-1)/5,即可以容忍整个网络中20%的节点出现拜占庭错误而不影响正确的共识。
2. 简图理解模式
共识过程节点交互示意图:
共识算法流程:
(八)POOL验证池共识机制
Pool验证池共识机制是基于传统的分布式一致性算法(Paxos和Raft)的基础上开发的机制。Paxos算法是1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现。Raft则是在2013年发布的一个比Paxos简单又能实现Paxos所解决问题的一致性算法。Paxos和Raft达成共识的过程皆如同选举一样,参选者需要说服大多数选民(服务器)投票给他,一旦选定后就跟随其操作。Paxos和Raft的区别在于选举的具体过程不同。而Pool验证池共识机制即是在这两种成熟的分布式一致性算法的基础上,辅之以数据验证的机制。
重庆金窝窝分析共识算法的形成方式如下:
区块链的共识机制,就是所有分布式节之间怎么达成共识,通过算法来生成和更新数据,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。
区块链主要包括四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。
区块链共识算法流程图的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于区域链共识算法、区块链共识算法流程图的信息别忘了在本站进行查找喔。
评论