BITGET交易所官网BITGET交易所官网

理财、金融、保险、贷款、虚拟货币
等知识简单易懂一秒就通!

区块链共识算法【什么是区块链共识算法】

作为虚拟货币行业的人,我们经常会谈到区块链共识算法,有很多细节需要注意。你知道什么是区块链共识算法吗?今天就让边肖告诉你吧!

我们已经多次分享了一些关于区块链技术的讲解和知识分析。

今天湖南java课程就来看看区块链技术中共识算法的一些基本定义和特征。

简单的区块链。我们一般意识形态中的链条是铁链子,是铁做的,一根一根扣着。

形象地说,区块链也可以这么理解,只不过它不是铁做的,而是由具有一定数据结构的块连接而成。这是一个简单的原型,用通俗的方式解释所谓的共识。通俗点说,就是我们都同意某件事。

比如我们在日常会议中讨论问题,比如我们判断一种动物是不是猫。我们用肉眼看了之后觉得自己像只猫。如果它符合猫的特征,那么我们认为它是猫。共识是一种规则。

继续我们的会议示例。

参加会议的人谈论通过会议解决问题。与区块链相比,参与挖掘的矿工通过某种共识的方法(算法)解决自己的账簿与其他节点的账簿保持一致的问题。

保持账簿一致的更深层次的含义是保持链中的块信息一致。

我们为什么需要共识?我不';我不需要它,可以吗?当然不是。没有一致的规则,生活就是一团糟。

区块链没有共识规则,各个节点各自为政,失去了一致的意义。

这两个例子的对应关系如下:会人=矿工会=共识方式(算法)谈解决问题=保持自己的账本和其他节点的账本一致。如果你不';不理解节点的概念和含义,请先作为矿工理解一下。一个节点包含许多角色。矿工就是其中之一。

共识算法目前,节点保持与区块链中其他节点账簿一致有几种常见的共识方法(算法):PoW,以比特币为代表(BTC)缺点:矿池的出现。在一定程度上违背了去中心化的初衷,同时使51%的攻击成为可能,影响了其安全性。

计算能力存在巨大浪费。看看矿池,消耗了很多电力资源。随着难度的增加,电费PoS已经不够用了。以ETH为代表,从PoW到PoS,破坏者的代价';对网络的攻击很低,因此更有可能是拥有大量令牌的节点争夺记账权,这将使网络共识被少数富有的账户所主导,从而失去公平性。

金窝窝分析区块链技术中的共识机制如下:

区块链是一个去中心化的分布式账本系统。由于对等网络的高网络延迟,每个节点观察到的事务序列不可能完全一致。

因此,区块链系统需要设计一种机制,以便就某个时间段内发生的交易顺序达成共识。这种在一个时间窗口内对事务顺序达成一致的算法被称为"共识机制"。

我们已经多次分享了一些关于区块链技术的讲解和知识分析。

今天海南java课程就来看看区块链技术中共识算法的一些基本定义和特征。

简单的区块链。我们一般意识形态中的链条是铁链子,是铁做的,一根一根扣着。

形象地说,区块链也可以这么理解,只不过它不是铁做的,而是由具有一定数据结构的块连接而成。这是一个简单的原型,用通俗的方式解释所谓的共识。通俗点说,就是我们都同意某件事。

比如我们在日常会议中讨论问题,比如我们判断一种动物是不是猫。我们用肉眼看了之后觉得自己像只猫。如果它符合猫的特征,那么我们认为它是猫。共识是一种规则。

继续我们的会议示例。

参加会议的人谈论通过会议解决问题。与区块链相比,参与挖掘的矿工通过某种共识的方法(算法)解决自己的账簿与其他节点的账簿保持一致的问题。

保持账簿一致的更深层次的含义是保持链中的块信息一致。

我们为什么需要共识?我不';我不需要它,可以吗?当然不是。没有一致的规则,生活就是一团糟。

区块链没有共识规则,各个节点各自为政,失去了一致的意义。

这两个例子的对应关系如下:会人=矿工会=共识方式(算法)谈解决问题=保持自己的账本和其他节点的账本一致。如果你不';不理解节点的概念和含义,请先作为矿工理解一下。一个节点包含许多角色。矿工就是其中之一。

共识算法目前,节点保持与区块链中其他节点账簿一致有几种常见的共识方法(算法):PoW,以比特币为代表(BTC)缺点:矿池的出现。在一定程度上违背了去中心化的初衷,同时使51%的攻击成为可能,影响了其安全性。

计算能力存在巨大浪费。看看矿池,消耗了很多电力资源。随着难度的增加,电费PoS已经不够用了。以ETH为代表,从PoW到PoS,破坏者的代价';对网络的攻击很低,因此更有可能是拥有大量令牌的节点争夺记账权,这将使网络共识被少数富有的账户所主导,从而失去公平性。

我们已经多次分享了一些关于区块链技术的讲解和知识分析。

今天北京java课程就来看看区块链技术中共识算法的一些基本定义和特征。

简单的区块链。我们一般意识形态中的链条是铁链子,是铁做的,一根一根扣着。

形象地说,区块链也可以这么理解,只不过它不是铁做的,而是由具有一定数据结构的块连接而成。这是一个简单的原型,用通俗的方式解释所谓的共识。通俗点说,就是我们都同意某件事。

比如我们在日常会议中讨论问题,比如我们判断一种动物是不是猫。我们用肉眼看了之后觉得自己像只猫。如果它符合猫的特征,那么我们认为它是猫。共识是一种规则。

继续我们的会议示例。

参加会议的人谈论通过会议解决问题。与区块链相比,参与挖掘的矿工通过某种共识的方法(算法)解决自己的账簿与其他节点的账簿保持一致的问题。

保持账簿一致的更深层次的含义是保持链中的块信息一致。

我们为什么需要共识?我不';我不需要它,可以吗?当然不是。没有一致的规则,生活就是一团糟。

区块链没有共识规则,各个节点各自为政,失去了一致的意义。

这两个例子的对应关系如下:会人=矿工会=共识方式(算法)谈解决问题=保持自己的账本和其他节点的账本一致。如果你不';不理解节点的概念和含义,请先作为矿工理解一下。一个节点包含许多角色。矿工就是其中之一。

共识算法目前,节点保持与区块链中其他节点账簿一致有几种常见的共识方法(算法):PoW,以比特币为代表(BTC)缺点:矿池的出现。在一定程度上违背了去中心化的初衷,同时使51%的攻击成为可能,影响了其安全性。

计算能力存在巨大浪费。看看矿池,消耗了很多电力资源。随着难度的增加,电费PoS已经不够用了。以ETH为代表,从PoW到PoS,破坏者的代价';对网络的攻击很低,因此更有可能是拥有大量令牌的节点争夺记账权,这将使网络共识被少数富有的账户所主导,从而失去公平性。

PoW算法是一种防止滥用分布式服务资源和拒绝服务攻击的机制。它要求节点执行消耗适量时间和资源的复杂操作,并且其操作结果可以被其他节点快速检查,以保证时间和能量的消耗。确保服务和资源用于真正的需求。

PoW算法最基本的技术原理就是使用哈希算法。假设找到哈希值Hash(r),如果原始数据是r(raw),则运算结果是R(Result)。

R=Hash(R)

Hash函数Hash()的特点是对于任意输入值R,得到结果R,不可能从R反推,当输入原始数据R变化1位时,结果R值完全变化。。在比特币的PoW算法中,引入算法难度D和随机值N,得到如下公式:

Rd=hash(rN)

该公式要求随机值N填入时,计算结果Rd的第一个D字节必须为0。。因为哈希函数的结果是未知的,所以每个矿工都要做大量的计算,才能得到正确的结果。计算结果广播到全网后,其他节点只需要做一次哈希运算就可以检查了。PoW算法使用这种方法使得计算消耗资源,验证只需要一次。

PoS算法要求节点验证者必须质押一定的资金才有资格进行挖掘和打包,区域链系统在选择打包节点时采用随机的方法。一个节点认捐的资金越多,它被选为打包块的概率就越大。

在POS模式下,每枚硬币每天都有一个币龄。比如你持有100枚硬币,总共30天,那么此时你的币龄就是3000。此时,如果您验证了POS冻结,您的币龄将被清除为0。同时从区块中获得相应的数字货币利息。

一个节点通过PoS算法进行封锁的过程如下:一个普通节点要成为封锁节点,首先要质押自己的资产,轮到它封锁的时候,把块打包,广播到全网。其他验证节点将验证该块的合法性。

DPoS算法类似于PoS算法,也有股份和权利质押。

但不同的是,DPoS算法采用的是委托质押的方式。,类似于代表普选选出n个超级节点。

选民为某个节点投下自己的一票。如果一个节点被选为记账节点,那么这个记账节点在得到一个奖励后,往往可以用任何方式回报它的投票者。

这N个记账节点会轮流划出来,节点之间互相监督。如果他们作恶,抵押将被扣除。

通过信任少量诚实节点,可以去除块签名过程中不必要的步骤,提高交易速度。

拜占庭问题:

拜占庭是古代东罗马帝国的首都。为了防止由一个将军率领的军队驻扎在每个封地,将军们只能通过信使传递消息。在战争中,所有的将军必须达成共识。,决定是否一起战斗。

但是,军队中可能有叛徒,这些人会影响将军们达成共识。拜占庭将军问题是指在已知其中一人是叛徒的情况下,剩下的将军如何达成一致决定的问题。BFT:

BFT是拜占庭容错,拜占庭容错技术是分布式计算领域的一种容错技术。拜占庭假设是现实世界的模型。由于硬件错误、网络拥塞或中断以及恶意攻击,计算机和网络可能会出现不可预测的行为。。拜占庭容错技术就是为了处理这些异常行为,满足待解决问题的规范要求而设计的。

拜占庭容错系统:

故障节点称为拜占庭节点,正常节点为非拜占庭节点。

假设分布式系统有n个节点,整个系统的拜占庭节点不超过m(n3m1),拜占庭容错系统需要满足以下两个条件:

另外,拜占庭容错系统需要达到以下两个指标:

PBFT是一种实用的拜占庭容错算法,解决了原有拜占庭容错算法效率低的问题。该算法的时间复杂度为O(N2),使得解决实际系统应用中的拜占庭容错问题成为可能。

PBFT是一种状态机拷贝算法,所有拷贝都是在一个视图旋转过程中操作的,主节点由视图号和节点号集合决定,即主节点p=vmod|R|。v:视图数量,|R|节点数量,p:主节点号。

PBFT算法的一致性过程如下:一个客户端发起消息请求,并将其广播到各个副本节点。主节点之一(领导者)发起建议消息pre-prepare并广播它。其他节点获得原始消息,并在验证完成后发送准备消息。每个节点接收2f1准备消息,这意味着它准备好了。并发送提交消息。当节点收到2f1提交消息,客户端收到f1相同的回复消息时,说明客户端发起的请求已经达到了全网的共识。

具体流程如下:

客户端c向主节点p发送请求,O,t,c请求,O:请求的具体操作,t:客户端发出请求时追加的时间戳,c:客户端标识。请求:包含消息内容m和消息摘要d(m)。。客户端签署请求。

主节点收到客户端的请求时,需要提交以下内容:

a.客户端请求消息的签名是否正确。

丢弃的非法请求。正确的请求,分配一个数字n,数字n主要用于对客户进行排序';的请求。然后向其他副本节点广播预先准备的v,n,d,m消息。v:查看号,D客户端消息摘要,M消息内容。。前期准备,v,n,d签主节点。n是一定范围内的[h,H],具体原因请参考垃圾收集章节。

副本节点I从主节点接收预准备消息。,需要进行以下检查:

a.主节点的PRE-PREPARE消息签名是否正确。

B.当前的副本节点是否收到了具有相同V号和N的消息?,但签署不同的预先准备的信息。

c.d.与M的摘要是否一致。

d.n是否在区间[h,H]内。

丢弃的非法请求。正确的请求复制节点I向包括主节点在内的其他节点发送准备,v,n,d,I消息。v,n,d,m与上述PRE-PREPARE消息相同,I为当前副本节点号。。准备,v,n,d,I签名复制节点I.在日志中记录预准备和准备消息,可用于恢复视图更改过程中未完成的请求操作。

当主节点和副本节点收到准备消息时,需要提交:

a.副本节点准备消息的签名是否正确。

B.当前副本节点是否在同一个视图v中接收到n。

c.n是否在区间[h,H]内。

D.D是否与当前收到的PRE-PPREPARE

非法丢弃请求中的D相同?。如果副本节点I收到2f1验证的准备消息,则向包括主节点在内的其他节点发送COMMIT,v,n,d,I消息,v,n,d,I的内容与上述准备消息相同。。COMMIT,v,n,d,I签名复制节点I.在日志中记录提交消息,用于恢复视图更改过程中未完成的请求操作。在日志中记录其他副本节点发送的准备消息。

主节点和副本节点收到提交消息后,需要提交:

a.副本节点提交消息的签名是否正确。

B.当前副本节点是否在同一个视图v中接收到n。

c.d.与M的摘要是否一致。

d.n是否在区间[h,H]内。

丢弃的非法请求。如果复制节点I接收到2f-1验证的提交消息。它表明当前网络中的大多数节点已经达成共识来运行客户端';s请求操作O并返回回复,v,t,c,I,r给客户端。r:是请求操作的结果。如果客户端收到f1个相同的回复消息,,说明客户端发起的请求已经达到了全网的共识,否则客户端需要判断是否向主节点重新发送请求。将其他副本节点发送的提交消息记录到日志中。

如果主节点作恶,它可以为不同的请求分配相同的序列号,或者不分配序列号,或者使相邻的序列号不连续。备份节点应该有责任主动检查这些序列号的合法性。

如果主节点离线或做了坏事,它不会广播客户端';的要求。客户端设置超时机制,如果超时,它将向所有副本节点广播请求消息。副本节点检测到主节点是邪恶的或离线的,并启动视图改变协议。

查看更改协议:

副本节点向其他节点广播VIEW-CHANGE,v1,n,C,P,I消息。n是最新稳定检查点的数量,c是2f1验证的检查点消息集,p是当前副本节点未完成请求的预准备和准备消息集。

当主节点p=v1mod|R|接收到2f个有效的VIEW-CHANGE消息时,它向其他节点广播NEW-VIEW,v1,V,O消息。。v是一组有效的视图改变消息。o是由主节点重新发起的未完成的预准备消息集。预准备消息集的选择规则:

副本节点接收来自主节点的NEW-VIEW消息,验证其有效性,如果有效,则进入v1状态,开始O.

中的预准备消息处理流程?

在上述算法流程中,为了保证在视图改变的过程中能够恢复之前的请求,每个副本节点在本地日志中记录一些消息,副本节点执行完请求后需要清除之前请求记录的消息。

最简单的方法是在回复消息后再次进行当前状态的一致同步,代价比较大,所以可以在执行多个请求k(比如100)后再进行一次状态同步。该状态同步消息是检查点消息。。

副本节点I向其他节点发送CheckPoint,n,d,I,其中n是当前节点保留的最后一个查看请求号,d是当前状态的总结,检查点消息记录在日志中。。如果副本节点I收到2f1个验证过的检查点消息,它会清除之前日志中的消息,将n作为当前稳定的检查点。这是一种理想的情况。实际上,当副本节点I向其他节点发送检查点消息时,其他节点还没有完成K请求,所以不会响应I'他们会按照自己的速度前进。,但此时发布的检查点没有形成稳定。

为了防止I的处理请求过快,设置了上面提到的高低水位区间[h,H]来解决这个问题。。低水位H等于最后一个稳定检查点的数量,高水位H=hL,其中L是我们指定的值,等于checkpoint周期性处理的请求数量的整数倍,可以设置为L=2K。当副本节点I处理超出高水位H的请求时,它将在此时停止,并等待稳定检查点发生变化,然后继续前进。

在区块链方案中,,一般适用于需要强一致性的私有链和联盟链场景。例如,在IBM领导的区块链超级账本项目中,PBFT是一个可选的共识协议。在Hyperledger的Fabric项目中,共识模块被设计为可插拔模块。支持共识算法,如PBFT和Raft。

Raft基于领导者驱动的共识模型,在该模型中,将选出一位杰出的领导者。,领导者将完全负责管理集群,领导者将负责管理Raft集群所有节点之间的复制日志。

在下图中,将在启动过程中选择群集的领导者(S1)。,并为来自客户端的所有命令/请求提供服务。Raft集群中的所有节点都维护一个分布式日志(复制日志)来存储和提交客户端发出的命令(日志条目)。领导者接受来自客户端的日志条目。,并将它们复制到Raft集群中的上述文章中(S2、S3、S4、S5)。

在Raft集群中,需要最少数量的节点来提供预期级别的一致性保证,这也称为仲裁。。在Raft集群中执行一个操作所需的最小票数是(N/2^1),其中N是组中成员的总数,也就是说,至少有一半的票数被投出,这也是为什么集群节点通常是奇数的原因。因此,在上面的例子中。我们需要至少3个节点才能有共识保证。

如果法定仲裁节点因任何原因不可用,即投出的票数未超过半数,则本次协商未达成一致,无法提交新的日志。

数据存储:Tidb/TiKV

日志:阿里巴巴';sgadget

服务发现:consuetcd

集群调度:HashiCorpNomad

]

只能容纳失败节点(CFT),不能容纳邪恶节点

按顺序投票,只能串行申请,所以在高并发场景下性能差

Raft通过解决围绕领导者选举的三个主要子问题以及管理分布式日志和算法的安全功能来解决分布式共识问题。

当我们开始一个新的Raft集群或一个领导者不可用时。新的领导者将通过簇中所有成员节点之间的协商来选举。因此,在给定的实例中,Raft集群的节点可以处于以下任何状态:Follower。候选人或领导者。

系统启动时,所有节点都是从动节点。如果他们不';在一段时间内没有接收到来自领导者的心跳信号,,追随者将被转换为候选人;

如果一个候选节点收到了大多数节点的票,那么它就可以转化为领导者。,其余的候选节点将返回到追随者状态;

一旦领导者发现系统中某个领导者节点的任期($TERM)比自己高,就会转化为跟随者。

Raft使用基于心跳的RPC机制来检测何时开始新的选举。在正常期间,领导者会定期向所有可用的追随者发送心跳消息(实际上,日志可能会与心跳一起发送)。因此其他节点以从者状态开始,并且只要它接收到来自当前领导者的周期性心跳,就保持在从者状态。

当跟随者超时时,它将以如下方式启动选举过程:

根据候选节点从簇内其他节点收到的响应,可以得到三种选举结果。

一致性算法的实现一般基于复制状态机。什么是复制状态机?

简单来说,同样的初始状态,同样的输入=同样的结束状态。。不同的节点应该用相同的确定性函数处理输入,而不引入不确定值,例如本地时间。使用复制日志是一个好主意,它具有持久性和顺序保持的特性,是大多数分布式系统的基石。

有了Leader,客户端的所有并发请求都可以在Leader端形成一个有序的日志(状态)序列,以表示这些请求的处理顺序。然后,领导者将自己的日志序列发送给追随者。维护整个系统的全局一致性。注意不是强一致性,是最终一致性。

日志由带有有序编号(日志索引)的日志条目组成。每个日志条目在创建时都包含术语编号($TERM),以及日志中包含的数据。日志中包含的数据可以是任何类型,从简单类型到区块链。每个日志条目都可以用一个[$term,index,data]序列对来表示,其中$term表示任期,index表示索引号,数据表示日志数据。

领导者尝试在集群中的大多数节点上执行复制命令。如果复制成功,命令将提交给群集,响应将发送回客户端。类似于两阶段提交(2PC)但与2PC的区别在于,领导者只需要一半以上的节点同意(工作状态下)。

领导者和追随者都可能崩溃。,那么跟随者维护的日志与领导者相比可能有以下几种情况

当领导者与跟随者不一致时,领导者强迫跟随者复制自己的日志。,领导者会从后向前尝试,在每个AppendEntries失败后尝试前面的日志条目(递减nextIndex值),直到成功找到每个跟随者的日志一致位置点(基于以上两个保证)。,然后把这个位置之后的关注者的条目一一覆盖。因此,丢失或额外的条目可能会持续多个术语。

要求候选人';的日志至少与其他节点一样是最新的。不然的话,追随者节点不会投票给候选人。

意味着每个提交的条目必须至少存在于这些服务器之一中。如果候选人';的日志至少与多数日志中的其他日志一样是最新的,它将保存所有提交的条目。,避免日志回滚事件的发生。

即任何一届最多选一个领导。这一点非常重要,在一个复制集中,任何时候都只能有一个领导者。系统中同时存在不止一个领导者它被称为大脑分裂,这是一个非常严重的问题,会导致数据覆盖的损失。在raft中,有两点保证了这个属性:

因此,某个任期内必须只有一个领导。

当集群中节点的状态发生变化(集群配置发生变化)时,系统容易发生系统故障。因此,为了防止这种情况,Raft使用了一种称为两阶段的方法来改变集群成员。因此,在这种方法中在实现新的成员配置之前,集群首先改变到中间状态(称为联合共识)。联合共识使系统即使在配置之间切换时也能响应客户机请求,其主要目的是提高分布式系统的可用性。

只要你仔细阅读以上内容,你就已经知道区块链共识算法的相关知识是什么了。如果你对屏幕前的区块链共识算法有什么好的建议和想法,欢迎在下面的评论区发表评论,我们会及时回复。

相关推荐
本文地址: http://1mt.cn/539974
文章来源: kk
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。 未经允许不得转载:
分享到: 更多
区块链共识算法【什么是区块链共识算法】文档下载: PDF DOC TXT

BITGET交易所官网 | 理财、金融、保险、贷款、虚拟货币 等知识简单易懂一秒就通!

联系站长网站公告