联盟链中实用拜占庭容错算法的改进

2022-02-24 12:33方燚飚周创明宋亚飞
计算机工程与应用 2022年3期
关键词:拜占庭视图共识

方燚飚,周创明,李 松,宋亚飞,高 娜,刘 唐

1.空军工程大学 研究生院,西安 710038

2.空军工程大学 防空反导学院,西安 710038

3.中国人民解放军 31436部队

2008年,一位化名为“中本聪”的学者提出了一种数字加密货币——比特币[1],比特币能够有效解决传统数字货币中的“双花”问题[2]和拜占庭将军问题[3],因而迅速引起了社会各界的广泛关注。随着数字加密货币的普及和发展,区块链技术逐渐进入人们的视野。区块链是一种以链式结构为基础的分布式账本[4],它是点对点网络、密码学、共识算法、智能合约等多种技术结合的产物,具有去中心化、不可篡改、安全可信、集体维护等特点。目前,区块链技术的应用场景已由早期的金融领域拓展到医疗、物联网、供应链、边缘计算等非金融领域[5]。作为一种分布式系统,区块链需要保证系统内的所有节点达成一致的状态共识。因此,共识算法是区块链技术的重要组成部分之一,直接影响到区块链系统的性能和可拓展性[6]。根据部署模式的不同,区块链可以分为公共链、联盟链和私有链三种类型,公有链中的共识算法以X证明机制(proof of X,PoX)为主[7],如工作量证明机制(proof of work,PoW),该算法有效解决了区块链系统中的共识问题,但需要消耗大量的网络算力,整体效率不高[8];Quantum[9]提出了权益证明机制(proof of stake,PoS),在数学计算难度的基础上加入了币龄的概念,一定程度上减小了算力的消耗,提高了共识效率。联盟链和私有链中节点需经过授权后才能够加入区块链网络,因此也被称为许可链[10]。许可链中使用的共识算法以分布式一致性算法为主,包括实用拜占庭容错算法(practical Byzantine fault tolerance,PBFT)[11]及其优化算法、Paxos算法[12]和Raft算法[13]等。PBFT算法是一类状态机拜占庭算法,能够容忍一定数量的恶意节点的攻击,并通过状态机复制机制来提高系统的可靠性和可用性。PBFT算法能够较好地解决分布式系统中面临的拜占庭将军问题,目前已成为许可链中主流的共识算法。

PBFT算法由拜占庭容错算法(Byzantine fault tolerance,BFT)改进而来,它继承了BFT算法的优点,大幅降低了算法执行的网络开销,使算法具有了实际应用价值。但PBFT算法在使用过程中还存在一些不足。首先PBFT算法无法动态感知系统节点数目的变化,由于算法采用C/S架构,系统必须通过重启来添加新节点,这对系统的日常运作会造成较大的影响。其次PBFT算法中各节点按编号顺序轮流担任主节点,选取方式较为简单且缺少节点资质审核,会对系统安全性带来隐患。最后PBFT算法虽然将BFT算法的复杂度降到了多项式级别,但对分布式系统而言其带来的通信压力仍然较大,且随着系统内节点数的增加,系统时延将大大增加,最终影响到系统运行效率。针对上述问题,研究人员希望通过优化PBFT算法的执行协议来提高算法性能,目前已经得到了T-PBFT[14]、Scalable BFT[15]和EPBFT[16]等PBFT的改进算法。

针对PBFT算法中存在的问题,结合联盟链的特点,本文提出了一种改进的PBFT算法(score-based PBFT,S-PBFT)。首先,在原有PBFT算法中引入评分机制,根据各节点运行状况对其进行打分,按评分高低将其分为共识节点、候选节点和预备节点三部分。其次,简化了PBFT算法一致性协议中的确认阶段,并将原本由所有节点共同参与的共识过程改为仅由共识节点参与,提高了共识效率,降低了算法的复杂度。最后,结合评分机制改进了主节点选举方式,S-PBFT中的主节点由共识节点中评分最高且具有最大编号的节点担任,最大程度上保证主节点的可靠性,减少触发视图更换协议的频率,提高算法效率。

1 相关背景介绍

1.1 拜占庭系统的优化研究

BFT算法最早由Lampor于20世纪80年代提出[17],主要用于解决分布式计算领域中的共识问题,但原始的BFT算法的运行复杂度较高,且会随着系统节点数的增加而呈指数级上升,因而缺少实际的应用价值。结合BFT算法的特性及不足,研究人员开展了大量改进研究,目前针对BFT算法的优化主要有以下三个方向:状态机拜占庭系统、结合可信部件的拜占庭系统和结合应用场景优化的拜占庭系统。

状态机拜占庭系统要求所有节点都执行统一的操作,来维护系统状态的一致性。现有的状态机拜占庭系统大多由PBFT算法改进得到,包括通过hybrid quorum(HQ)减少序号分配过程的HQ算法[18],基于speculation技术的简化了一致性协议的Zyzzyva算法[19],运用拜占庭锁技术从而提高系统性能的Zzyzx算法[20]以及将一致性过程与请求执行过程分离的ZZ算法[21]和ODRC算法[22]等。

结合可信部件的拜占庭系统通过在系统中增加可信部件来提高系统可靠性、减少系统共识节点数、降低系统开销。早期可信部件主要用于系统的检测,如PRRW算法[23]中用于控制服务器修复过程的内部同步网络和VM-FIT[24]中用于加快数据同步的虚拟化技术等。后期,研究人员利用可信部件来减少系统所需节点数,从而降低系统开销。Miller等通过一种可信计数器(trusted incrementer)来降低系统的开销[25]。

部分应用场景下,已有拜占庭协议无法满足实际需求,这就需要结合实际应用场景对拜占庭协议进行优化。Li等[26]针对分布式网络中可能出现的通信不稳定的问题,设计了一种改进的拜占庭算法Zeno。借助Zeno算法,系统能够在最多1/3的节点出现网络中断的情况下保持一定的功能,且在网络恢复后,可快速使所有节点达成一致状态。区块链平台NEO所采用的DBFT算法针对大规模节点数下系统性能不足的问题,对拜占庭协议进行了优化。

1.2 PBFT算法

PBFT算法是一类状态机拜占庭系统,主节点、从节点、视图是算法运行过程中的三个重要组成部分。主节点是算法执行过程的发起者,负责对请求进行排序;从节点接收并执行从主节点接收到的请求,保证算法的有效性;所有节点需要在统一视图下执行请求,当主节点发生故障时,就会出现视图更换机制改变当前主节点。在一具有f个拜占庭节点的系统中,节点总数N需大于3f+1才能使系统达成一致,即PBFT算法最多能够容忍(N-1)/3个非法节点的破坏。

为保证系统中节点达成共识,PBFT算法运行在以下三种协议下:一致性协议、检查点协议和视图更换协议。其中一致性协议是PBFT算法的核心协议,原始的PBFT算法中一致性协议主要有请求(request)、预准备(pre-prepare)、交互(prepare)、确认(commit)和响应(reply)五个阶段,如图1所示。

图1 PBFT算法一致性协议执行流程Fig.1 Implementation process of PBFT algorithm conformance protocol

(1)请求阶段:客户端C向主节点N0发送请求消息<RE QUEST,m,t,c>,其中m为客户端请求的主要内容,t为时间戳,c为客户端C的身份信息。

(2)预准备阶段:主节点N0接收到请求消息m后,为接收到的m分配序号,并生成预准备消息<<PR EPREPARE,v,n,d>,m>,其中v为当前视图编号,n为主节点对请求内容m分配的编号,d为请求内容m的消息摘要。生成完毕后,主节点将预准备消息发送至各个节点。

(3)交互阶段:从节点接收到预准备消息后,需要与其余节点进行交互。从节点向其余节点发送交互消息<PREPARE,v,n,d,i>,其中i为发送消息的节点的编号。从节点接收到来自其余从节点的交互消息后,会将接收到的交互消息与来自主节点的预准备消息进行对比验证,当有2f+1个来自不同从节点的交互消息与预准备消息一致时,即可进入下一阶段。

(4)确认阶段:节点完成交互阶段后,即进入确认阶段。在此阶段中,包括主节点在内的所有节点向其余节点发送确认消息<COMMIT,v,n,D(m),i>,其中D(m)为节点对请求的签名。节点接收到来自其余节点的确认消息后,对消息内容的准确性进行核验。当有2f+1个确认消息通过验证,则确认阶段完成。

(5)回复阶段:完成确认阶段后,各节点向客户端发送回复消息<REPLY,v,t,c,i,r>,其中r为客户端请求的执行结果。若客户端在接收到至少f+1个相同的回复消息,则请求执行成功。

2 S-PBFT算法设计

2.1 算法整体思想

PBFT算法是一类“状态机”拜占庭系统,早期用于实现传统分布式系统中各节点状态的一致性,其首要任务是解决系统中可能出现的拜占庭问题,同时需要保证节点能够按照既定顺序执行客户请求。在区块链系统中,各个区块的共识过程按照具有严格的顺序进行,无需共识算法进行干预。另外,在联盟链环境下,节点在进入系统时需要经过一定的身份认证机制,如基于角色的身份认证等,能够有效地避免女巫攻击等问题。因此,为使PBFT算法能够更好地应用于联盟链系统,结合联盟链特点,针对经典PBFT算法中存在的不足,提出了以下优化思路:

(1)省略一致性协议中的请求和回复阶段。PBFT算法中的请求和回复阶段是系统节点与客户端之间的交互,而在区块链共识过程中数据区块直接由主节点生成,无需专门的客户端参与。

(2)引入评分机制,按节点积分进行分类。首先结合联盟链身份认证的特点,根据节点处理能力大小为各节点分配初始积分(S ib)并记录各节点初始积分的值,随后根据节点积分(Si)大小将其分为共识节点、候选节点、预备节点三类。其中,共识节点负责完成系统共识过程,由PBFT算法一致性协议可知,当客户端接受到超过f+1个来自合法节点的一致消息时,才可认定请求执行成功,因此共识节点的数量取为2f+1;候选节点只保存共识结果,而不参与系统共识过程,其数量不定;预备节点由初始积分较低的节点和共识节点中发生错误的节点组成,不参与共识但需保存共识结果,其数量不定。

(3)改进主节点选举方式。主节点属于共识节点的一部分,当主节点出现问题,该节点直接降为预备节点,随后将余下共识节点中持有积分最高且初始积分较高的节点作为主节点。

(4)优化一致性协议,对确认阶段进行简化。在PBFT算法中,节点交互阶段已经完成了共识过程,确认阶段的作用主要是使各节点掌握其余节点的状态。在传统的分布式系统中,确认阶段为系统提供了状态确认的过程,使各节点能够知晓其余节点的共识状态,确认系统达成一致。在联盟链系统中,每一个达成共识的区块都可作为一个检查点,在交互阶段完成共识后,通过区块同步即可使系统达成一致。相较于传统的分布式系统,联盟链中的节点具有更高的可靠性,系统环境更为稳定。同时,改进的主节点选举方式和联盟链的可追溯的特性也保证了区块同步过程的合法性,因此在S-PBFT算法中对确认过程进行简化。

S-PBFT算法将原本需要进行两两交互的确认过程简化为直接由主节点对共识结果进行判定,从而减少了一次复杂度为O(N2)的交互过程,在一定程度上能够降低系统通讯开销,提高算法的共识效率。

2.2 符号表示及节点组成

(1)系统节点集合为N,由{1,2,…,i}表示,非法节点最大容忍数为f,N中节点数i不应小于3f+1个,考虑到系统共识效率,i通常取3f+1。

(2)共识节点集合为G,由{1,2,…,g]表示,为使算法能够达成有效共识,结合拜占庭协议的共识原理,S-PBFT算法中共识节点的数量g不得小于2f+1;候选节点集合为H,由{1,2,…,h}表示;预备节点集合为Y,由{1,2,…,y}表示。候选节点数h与预备节点数y之和为f。

(3)初始状态下,共识节点由积分在9及以上的节点组成;候选节点由积分在8~9之间的节点组成;预备节点由积分在8及以下的节点组成。

2.3 节点评分机制

节点评分机制是S-PBFT算法改进思想的核心,为主节点选举和一致性协议的优化奠定了基础。S-PBFT算法的节点评分机制主要分为节点初始积分和积分调整规则两部分,下面结合这两部分来分析节点评分机制。

2.3.1 节点初始积分

S-PBFT算法中,节点初始积分的赋予主要有以下两种情况:系统初始化时对系统内节点的评分、有新节点加入时对新节点的评分。

(1)系统初始化时节点的评分。本文提出的S-PBFT算法主要应用于联盟链环境,联盟链是由一定数量的具有共同诉求的节点构建,如针对银行之间结算问题的银行同业联盟链。此类区块链中,节点之间的综合实力存在一定的差距,通常情况下节点综合实力越强,节点具有的性能和功能优势就越大,节点稳定性就越好。

结合以上分析,S-PBFT算法将节点综合实力作为初始积分的评分依据。进行评分时,将所有节点按综合实力大小进行排序,考虑到共识过程中对节点稳定性和性能的需求,将排好序的节点按2f+1、f2、f2的比例分为共识节点、候选节点和预备节点三部分,节点顺序由所有节点投票得出。其中,共识节点部分节点评分需大于9,候选节点部分节点评分在8~9,预备节点部分节点评分小于8。

在实际应用过程中,可根据部署系统的需求,对候选节点和预备节点的比例进行调整,但共识节点的数量不得小于2f+1。

(2)新节点加入时节点的评分。联盟链中,节点需要得到联盟链的授权后才能够加入到联盟链网络中,此时即需要对节点进行评分。节点积分大小同样由授权节点投票得出,系统根据节点积分将新节点划分到对应节点集合中。为维护系统稳定性,通常情况下,不将新节点直接划为共识节点。

2.3.2 积分调整规则

S-PBFT算法中,节点具有三种不同状态,不同状态的节点之间能够互相转换,但具有一定的转换条件,在此制定如下规则:

(1)加分规则:节点每成功完成一次共识过程,积分在9以上的节点积分加0.01,积分在8~9的节点积分加0.05,积分在8以下的节点积分加0.2。集合G中,节点积分最高为10,积分到达10后不再增加;集合H和Y中,节点积分增加无上限。有以下公式:

其中,S p为节点执行共识前的积分,S为节点执行共识后的积分。

(2)扣分规则:集合G与H中,节点在共识过程中出现错误,节点的积分直接降为8,且不论节点原本类型,均直接转换为预备节点;集合Y中,节点出现错误,节点积分减0.5。

(3)节点转换规则:若共识节点出现错误,则出错节点转换为预备节点,并将集合H中积分最高且初始积分较高的节点转换为共识节点,节点积分变为9;若候选节点出现错误,则出错节点转换为预备节点,并将集合Y中积分最高且初始积分较高的节点转换为候选节点,节点积分变为8。

2.4 主节点选举

在系统初始化或是主节点出现拜占庭错误后,需要进行主节点选举。S-PBFT算法中,主节点选举以节点积分作为主要参考,将持有积分最高且初始积分较高的节点作为主节点。较高的持有积分说明节点功能近期较为稳定,较高的初始积分则说明节点具有较好的性能,将此类节点作为主节点,能够最大程度上保证主节点的稳定性,减少触发视图转换的概率,提高系统效率。下面简要说明主节点选举的流程。

主节点选举过程中,集合G内的各节点需要通过两两交互来确定主节点人选。交互过程中,将节点i编号(i)、持有积分值(S i)和初始积分值(Sib)组成一个数组(i,S i,S ib),作为选举凭证(vote)。节点将自身的vote广播至各个共识节点,各节点奖接受到的vote与自身vote进行比较后,保存条件更优的vote,可能的比较结果如下:

(1)若接收到的vote中的持有积分数据小于节点自身的持有积分数据,则保存自身vote。

(2)若接收到的vote中的持有积分数据等于节点自身的持有积分数据,则继续比较初始积分。若接收vote的初始积分更高,则保存接收到的vote;否则保存自身vote。若两者初始积分也相同,则保存节点编号更小的vote。

(3)若接收到的vote中的持有积分数据大于节点自身的持有积分数据,则保存自身vote。

当完成所有节点的比较后,各共识节点将自身签名添加到最终结果(D(i),g,S g,S gb)中,其中D(i)为节点i的签名,g为待定主节点的编号,随后进行广播。当有至少f+1个结果一致的凭证时,选举完成,最终凭证中节点编号对应的节点作为主节点,选举结束。选举过程如图2所示,图中仅为节点1与其他节点的交互过程,其余节点间交互过程类似。时间间隔后,主节点将这些交易中的合法交易打包,生成一个数据区块。随后,进入一致性协议阶段,对此交易区块进行共识。

图2 主节点选举过程示意图Fig.2 Process of master node election

(1)S-预准备阶段(S-pre-prepare):主节点根据数据区块内容生成S-预准备消息<<S-PRE-PREPARE,v,n,H(b)>,b>,其中H(b)为区块的内容摘要即区块哈希值,b为本次进行共识的区块。随后,主节点将S-预准备消息发送至所有节点,其中共识节点需对消息内容进行核验,核验通过则进入下一阶段,否则进行视图变更,更换主节点;候选节点和预备节点仅接收消息,不对消息内容进行反馈。

(2)S-交互阶段(S-prepare):共识节点完成S-预准备消息核验后,需生成S-交互消息<S-PREPARE,v,n,H()b,i>,其中i为发送节点的编号,将此S-交互消息广播至所有共识节点。共识节点会对接收到的S-交互消息进行核验,当有f+1个来自不同共识节点的一致的S-交互消息时,即可进行下一阶段,否则中止共识过程,更换问题节点,重启共识过程。

(3)S-确认阶段(S-commit):完成S-交互消息的核验后,进入即可进入S-确认阶段。S-确认阶段主要用于核验各节点保存的区块数据的正确性,因此包括候选节点和预备节点在内的所有节点均需要向主节点发送S-确认消息,以保证最终上链区块的一致性。S-确认消息的内容为<S-COMMIT,v,n,H(b),D(b)i,i>,其中D(b)i为节点i对区块b的签名。当主节点接受到2f+1个来自不同节点的S-确认消息时,即完成共识,区块b可保存到联盟链中。

S-PBFT算法的流程如图3所示。

图3 S-PBFT算法执行流程Fig.3 Execution flow of S-PBFT algorithm

2.5 一致性协议

完成主节点选举后,各节点需通过状态同步,使视图号、区块高度、前区块哈希值等数据达成一致。随后,即可对新的数据区块进行共识,即执行一致性协议。S-PBFT中引入了评分机制,通过对节点类型分类、改进主节点选举方式,实现了对共识节点的多重筛选,最大程度上保证了共识节点的可靠性。改进的一致性协议执行流程如下:

当联盟链中的交易量达到一定数量或是达到一定

3 实验分析

通过实验从共识时延、通信开销和吞吐量三个方面对S-PBFT算法和PBFT算法进行测试、分析,比较两种算法的性能。本实验在实验室内部局域网中搭建了联盟链环境,通过docker容器设置若干个配置相同的虚拟节点作为系统节点,实验具体配置信息如表1所示。

表1 实验配置信息Table 1 Experiment configuration information

3.1 共识时延

区块链系统中,共识时延是指由节点提交交易请求到系统完成共识所需要的时间,是评价共识算法性能的一个重要参数,降低共识时延能够提高系统运行效率和实用性。本实验将系统节点总数作为实验变量,节点数由10递增至40,步长为6,在不同节点数下分别进行多次交易,取不同状态下的平均值作为该状态共识时延的最终值,实验结果如图4所示。

图4 共识时延对比结果Fig.4 Results of consensus delay comparison

由实验结果可知,不同节点数下,S-PBFT算法由于简化了一致性协议中的确认节点,在共识时延上的表现要优于PBFT算法,且随着节点数的增加,S-PBFT算法的共识时延增长率更小,稳定性更好。

3.2 通信开销

S-PBFT算法的主要思想是通过简化PBFT算法中的一致性协议来降低算法复杂度,提高算法效率。因此设计了算法通信开销对比实验,来比较分析两种算法在通信开销方面的性能。本文将通信开销设定为系统完成一次一致性协议节点间需进行的平均通信次数。假设系统视图变更概率为p。

(1)PBFT算法通信开销

根据1.2节中对PBFT算法的分析,一致性协议中节点间的通信次数为6f(3f+1,f)为系统能够容忍的拜占庭节点的最大个数。

试图转换阶段中,从节点需要通过两两交互来传递视图转换信息,此时通信次数为9f2。完成视图变更后,主节点需要向从节点发送视图确认消息,此时通信次数为3f。结合视图变更概率p,得PBFT算法的平均总通信次数为:

(2)S-PBFT算法通信开销

一致性协议中,S-PBFT算法仅进行3阶段的交互。在S-预准备阶段和S-确认阶段通信次数均为3f,在S-交互阶段主节点之外的共识节点需要向其他共识节点广播区块信息,通信次数为4f2,因此一致性协议阶段总通信次数为4f2+6f。

主节点选举阶段,首先共识节点需要将选举凭证广播至自身以外的共识节点,通信次数为2f(2f+1)。各共识节点选出待定主节点后,将选举结果广播至各共识节点进行确认,此过程中同样进行了2f(2f+1)次交互。最后,新的主节点向所有共识节点发送确认信息,通信次数为2f。

因此,S-PBFT算法的平均总通信次数为:

由此可得,S-PBFT算法与PBFT算法的通信次数的比值Q为:

通过MATLAB得出此公式的可视化图形,如图5所示。其中p的取值为0到1,步长为0.1,f的取值为3到23,步长为2。

图5 S-PBFT算法与PBFT算法通信次数比值三维曲面图Fig.5 Three dimensional surface graph of algorithm communication times ratio

由图5可知,在给定范围内,无论p和f的取值如何变化,Q值始终小于1,即S-PBFT算法的通信次数始终小于PBFT算法的通信次数。随着节点数的增加Q值逐渐减小,说明在多节点环境下,S-PBFT算法的通信开销表现仍优于PBFT算法。另外,S-PBFT算法引入了评分机制,对节点进行多次筛选,能够降低了视图转换发生的概率,因此在实际过程中,S-PBFT算法在通信开销上会有更好的表现。

3.3 吞吐量

吞吐量指单位时间内系统能够处理的事件量,本实验将每秒事件处理数(TPS)作为表示系统吞吐量,系统TPS可由以下公式表示:

其中,TradeΔt为出块间隔内系统处理的事件数,Δt为出块间隔。

实验将节点总数作为变量,节点数由10递增至70,步长为6,在不同节点数下进行20次重复实验,每次实验的事件量设置为1 000,最终取实验结果的平均值作为不同节点数下吞吐量的值,实验结果如图6所示。

图6 S-PBFT算法与PBFT算法吞吐量对比Fig.6 Throughput comparison between S-PBFT algorithm and PBFT algorithm

由实验结果可知,节点数较小时,随着节点数的增加,两种算法的吞吐量均呈上升趋势。随后PBFT算法与S-PBFT算法的吞吐量先后达到峰值,其中S-PBFT算法吞吐量的峰值更大、到达峰值时的节点数更多,且在整个过程中,S-PBFT算法的吞吐量始终大于PBFT算法的吞吐量,因此S-PBFT算法具有更好的吞吐性能。

3.4 共识节点可靠性

共识节点是S-PBFT算法共识过程的执行节点,共识节点的可靠性直接决定了系统共识的达成,因此S-PBFT算法中,共识节点的可靠性具有十分重要的意义。

由前文分析可知,S-PBFT算法以节点初始积分和节点实际积分为共识节点选取依据来选取共识节点。节点初始积分是节点综合实力的体现,节点实际积分则是一段时间内节点在共识过程中表现的综合评价,能够在一定程度上反映节点执行共识的稳定性。因此,理论上,相较于随机的节点选取方式,由以上方法得到的共识节点能够具有更好的可靠性和稳定性。

下面通过对比实验来对共识节点的可靠性进行测试。实验以S-PBFT算法为基础,设置A、B两组对照组:A组的共识节点由节点积分规则选出,B组的共识节点在所有节点中随机挑选。实验通过比较相同节点数下,算法的共识成功率来分析。

实验中,总节点数由10递增至70,步长为6,在不同节点数下进行多次实验,得到该节点数下算法的共识成功率。两组实验中节点的算力、带宽等资源按相同原则随机分配。实验结果如图7所示。

图7 节点可靠性实验结果Fig.7 Results of node reliability experiment

由实验结果可知,随着节点数的增加,实验组A的共识成功率始终保持在98.5%左右,实验组B的共识成功率随着节点数的增加整体上呈下降趋势。实验组A中,共识节点根据节点积分和节点初始积分选出,始终能够保证具有更高算力、更大带宽、更稳定的节点作为共识节点。而实验组B中共识节点间的性能差距较大且由于系统资源有限,随着节点数的增加,节点分配到的资源越来越少,导致了共识成功率的下降。可见,通过对节点的动态调整,能够提高共识节点的可靠性。

4 总结与展望

随着区块链的不断发展,共识算法的改进研究越来越得到科研人员的重视,共识算法的优劣直接影响到区块链的性能和安全性。本文在PBFT算法的基础上,设计了一种改进的S-PBFT算法。S-PBFT算法将节点分为共识节点、候选节点和预备节点三类,通过评分机制最大程度保证共识节点的可靠性。此外,S-PBFT算法还优化了一致性协议及其执行过程,在保证算法功能性的同时降低了算法复杂度,提供了运行效率。但S-PBFT算法仍存在一些不足,在后续工作中将结合具体应用场景进一步细化节点评分机制,构建动态网络结构,增强系统灵活性,提高系统实用性。

猜你喜欢
拜占庭视图共识
共识 共进 共情 共学:让“沟通之花”绽放
拜占庭元素的艺术特征及在现代服装设计中的应用
论思想共识凝聚的文化向度
拜占庭帝国的绘画艺术及其多样性特征初探
商量出共识
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
《西方史学通史》第三卷“拜占庭史学”部分纠缪
Django 框架中通用类视图的用法