基于信用的联盟链共识算法

2022-05-11 版权声明 我要投稿

摘要:针对当前共识算法中存在的共识效率低下和激励机制不足的问题,提出了一种基于信用的联盟链共识算法。首先,根据节点参与共识过程的行为,设计节点信用评估机制,通过信用奖励解决节点间激励机制不足的问题。其次,构造信用区块链和信用计算模型,将节点的信用值进行存储,并作为挑选“矿工”节点的依据,提高了共识算法的效率。最后,提出了分轮次的矿工节点选择算法,利用随机算法和优先级排列算法依次选择矿工节点,并提出节点信用值评估方法,避免节点信用值过大而成为“寡头”,确保节点成为矿工节点的公平性。实验仿真结果表明,该信用共识算法算力消耗低,出块速度快,相比现有的共识算法具有更好的性能,可以很好的应用于商业和医疗等联盟链场景。

关键词:区块链;共识算法;联盟链;信用

0引言

区块链作为比特币[1]的底层技术,具有去中心化、交易数据时间戳、不可窜改、全网节点共同维护数据库等特性,引起各领域研究人员的广泛关注。区块链技术本质上是由分布式数据存储、点对点传输、共识机制[2]和加密算法等计算机技术相互融合的新型应用模式[3]。此外,区块链技术还为网络节点提供了一个安全的框架,所有节点都是以匿名的方式参与交易,保证了参与节点的隐私安全[4,5],同时交易具有防窜改、透明性和可追溯性[6]等特性。

不同的应用场景,适用的共识机制也不同,根据区块链应用场景的不同,可以将区块链分为三种基本类型:公有链、联盟链和私有链[7,8]。在公链中,以比特币使用的共识算法PoW(proofofwork,PoW)为例,节点可以自由加入与退出,不受约束,但是节点稳定性差,节点与节点之间也毫无信任可言,达成共识需要消耗大量的算力资源,所以PoW不适合实际的商业应用。而在联盟链当中,以主流共识算法的节点信用值,并构建信用区块链和计算模型,存储节点信用,最终根据矿工信用大小,依次选择节点成为矿工。CCAC适用于联盟链场景,节点信用值可作为商业联盟链中节点利益的分配依据。

1主要联盟链共识算法

共识算法的作用是为了让区块链中节点实现数据的一致性,共识算法需要在一致性、可用性和分区容错性即CAP[12](consistencyavailabilitypartition-tolerance,CAP)原理之间进行权衡,从而满足所适用的应用场景。以下是目前联盟链中主流的共识算法。

1.1PBFT

PBFT主要由一致性协议、视图更改协议和检查点协议组成。PBFT规定一个有3f+1副本节点的系统中,其中最多有f个拜占庭失败节点。PBFT将节点类型划分为主节点和副本节点,其共识流程分为5个阶段:请求、预准备、准备、承诺、答复,如下图1所示,主节点接收客户机请求并转发给其他节点,一条请求经过如下5个阶段,节点与节点间才能达成共识。

用值的存储,然后设计信用区块数据结构;最后根据信用数据结构,设计信用计算模型,计算节点信用值。

2.1.1信用评价指标

相对公有链,联盟链节点相对更加稳点,信用考量更加趋于节点在参与共识过程中的表现。基于此思想,本信用共识主要评价指标取决于参与节点在实现区块上链过程中所进行的工作,即数据区块的交易数大小和区块上链时间相比上一区块上链时间相对大小,同时信用叠加要符合上链区块有效性这一原则。评价指标如下:

a)根据节点成功生成有效区块,该区块中包含的交易数作为主要信用激励方式,称之为信用区块值,得到的信用值奖励用Bc表示;

b)根据节点成功上链有效区块所用时间作为额外激励方式,称之为创块时间信用值,得到的时间信用值奖励用Bct表示;

c)节点生成无效区块,进行信用无效区块累计叠加,实行信用倍减惩罚,用FN表示无效区块数。

2.1.2信用区块数据结构

结合信用评估指标,设计信用区块数据结构,便于信用数值存储和计算,以及信用验证,其中图2为信用区块数据结构图。

虽然PBFT避免了算力浪费的问题,但在节点为N网络中,消息传输的开销仍然很大,规模为O(N2)。由于通信的复杂性,当节点数超过一定数量时,PBFT协议的性能会急剧下降,在节点较多的联合体区块链系统中运行不佳,而且缺乏一定的激励机制,主节点及副节点积极性不高,甚至会有更多节点处于宕机行为,影响整体共识效率。

1.2DPoS

DPoS是PoW和权益证明机制[13](proofofstake,PoS)的原理相结合的一种共识算法,通过采用委托人的方式,权益相关者投票给信任的委托人,票数与其权益大小成正比例关系,最终选出101名委托人以平等的权利轮流作为区块生产者行使权利。如果委托人在委任期间未按规则产生正确区块,该委托人将会被除名,所有权益持有者选出新的节点将其替代。DPoS类似于董事会中“股东式”管理模式,以选举委托人的方式实现共识,带来了比较严重的中心化问题,并且利益由利益相关者决定,缺乏公平竞争性,矿工节点积极性不高。

1.3其他共识算法

Ripple[14]是一种基于互联网的开源支付协议,其共识原理也是通过选票的方式,由特殊节点进行投票验证,当至少满足50%选票阈值时,再进行下一轮投票,每轮的筛选门槛。

a)轮次数:代表当前轮次,便于统计参与节点信用值大小,以及验证参与节点是否存在同轮次多次成为矿工节点;b)交易数据区块hash值:登记参与矿工所生成的数据区

块,即数据区块与信用区块一一对应;

c)数据区块交易数:便于统计和验证矿工节点获得信用值是否正确;

d)数据区块上链时间:便于参与节点验证矿工节点获取的时间奖励是否正确;

e)节点i获得信用值:便于验证矿工节点获取的信用值是否正确,其中若为0,则表示该节点生成的为无效区块;

f)信用数组Cv:当前轮次下的参与节点信用值大小;

g)随机排序数组Rs:当前轮次结束,下一轮次开始时根据随机算法生成的参与节点成为矿工的顺序。

2.1.3信用计算模型

根据信用评估指标,统计节点当前轮次获得信用值、下一轮次初始信用值、评估信用值,其中CurR_Cv(i)、NR_Cv(i)、Evaluate_Cv(i)分别表示当前轮次获得信用值、下一轮次信用值、评估信用值。根据信用评估指标,Bc作为节点信用叠加主要来源,其Bc数据大小具有离散随机性,结合这一特性,本文采用如下函数:

1

都将提高,投票率超过80%的交易将最终记录在分布式分类账中。如果存在节点宕机,将会直接影响共识进程。而且节点身份已知,一定程度上违背了区块链去中心化的初衷。

2CCAC共识算法

2.1信用机制

信用机制设计共分三步:首先构建节点信用评估指标,建立节点信用评价方式;其次引入信用区块链,用于节点信该函数为单极性,是一种单调递增的转移函数,转移函数是用来拟合输入与输出之间的数据关系。根据Bc数据特性和取值范围,通过此函数将信用值转换到值域[0.5,1],便于信用数据的更新与维护,使得节点信用值由离散型变为相对平衡,同时Bc符合单调递增原则。

而时间信用值Bct,时间越长,节点获得的信用值越小,基于这一原则,Bct奖励采用如下函数:

在初始化阶段,各参与节点信用为0,系统为参与节点随机分配序号,构建信用数组Cv[i]。根据Cv[i]通过随机算法该函数符合Bct奖励原则,同时能够有效的将取值范围控制在[0,0.5],很好的解决信用值离散问题,便于对信用值大小的规约。

基于上述对节点信用评价数据标准化,节点信用按共识轮次依次叠加原理,其节点信用计算方式如下:

a)初始化阶段:节点i信用初始化:Init_Cv=0;

b)第L轮次:即第L轮次成为旷工节点,节点所获得的信用奖励,其中和分别表示区块交易数和区块上链时间大小。

1,生成随机数组Rs[i]和信用数组Cv一起打包成信用创世区块,然后全网广播给所有参与节点,作为首个信用区块。

其中随机选择算法1是洗牌算法中的一种,该算法通过对内部打乱的思想实现随机性,算法完成后原始数据被直接打乱,时间复杂度为O(n)。

2.2CCAC算法设计

首先,系统将参与节点初始化信用值为0,并为每个参与节点分配序号,起始序号为1,构建信用数组Cv,而Cv[0]则存储参与共识节点个数。每个参与节点需要共同维护一个信用区块链,并通过轮次判断进行矿工节点选择方式。其中信用共识流程如下图3,整个信用共识算法共分四个步骤:初始化阶段、轮次判断选择矿工节点方式、生成区块阶段、新区块校验阶段。

当所有节点都已成为矿工时,完成本轮次矿工选择。判断当前轮次是否结束,如是则系统根据信用区块,统计参与节点信用值大小,并更新信用Cv值,然后通过随机算法2,生成下一轮次节点选择顺序,发放给所有参与节点,开始下一轮次记账。

其中算法2为优先级排列算法:根据信用值大小即Cv[i]大小,赋予每个参与节点一个优先级,然后依据优先级对数组Cv中的元素进行排序。伪代码如下:

对信用数组进行排序,然后更新信用区块中的Rs数组。

2)构建新区块(数据交易区块和信用区块)

当判断选择矿工节点后,矿工节点打包数据区块和信用区块,首先将数据区块进行全网广播发给参与节点,相邻节点验证成功后,继续向全网广播此区块,当所有参与节点验证通过后,每个节点都会将它加到自身节点的区块链副本中。矿工节点再将信用区块,进行全网广播,验证节点根据交易数据区块,验证该信用区块是否正确,节点验证通过后,将此信用区块加入到自身节点的信用区块链副本中,然后继续向全网广播此信用区块,直到所有参与节点验证完成。

3)校验新区块(数据交易区块和信用区块)

当新区块在网络中扩散时,每一个节点接收它之前,都需要进行一系列的验证,确保区块有效性并在网络中传播。由于校验工作是相互独立进行的,为确保信用节点生成的区块有效性,区块交易数据上链后,并由矿工节点生成信用区块进行广播,经过全网广播,进行信用区块验证,验证无误后,在将信用区块上链,节点获得信用奖励。反之,如果数

据区块的无效性,会将这种“不诚实行为”记录到信用块链中,进行节点信用惩罚。

3实验结果及分析

为测试所提出的CCAC共识算法的优劣性,通过将CCAC和主流共识算法进行对比,搭建了一个区块链平台,分别在相同的网络环境下,模拟了一个简单的区块链共识过程。本CCAC共识实验思路为:通过节点加入,并将交易添加到交易池,随机分配给网络节点,进行记账,计算区块创建所花费的时间,持续几轮的共识过程;统计分析节点的信用值,根据信用值排名优先序列来选取记账节点。

3.1实验环境

实验电脑配置操作系统Window10、处理器为IntelCorei7、内存8GB、DDR4。使用Golang编程语言,并使用JetBrainsGoLand2018.3.2版进行仿真测试。

通过使用go语言编写一个多线程、一机多节点的平台,在相同的局域网内,实现多机网络通信,进行共识过程模拟,并分别测试PoW和DPoS、PBFT共识算法共识过程的时间效率。然后分别模拟了10节点、20节点,分别进行200、400和800、1600、3200次共识过程,取平均值并绘制折线图,进行数据比较分析。

3.2仿真结果

3.2.1共识平均耗时比较

本文的CCAC算法与PoW、DPoS和PBFT算法进行了共识过程效率的比较,如图4所示,横坐标表示共识次数,纵坐标表示随着共识次数的变化,所需要的平均共识时间。图4表明随着共识次数的增加,共识所需要的时间也越来越长。其中CCAC、DPoS和PBFT整体平均共识时间相对增长平缓,而PoW增长速率高。产生该情况的原因如下:

a)根据PoW共识原理随着区块链长度的增加,PoW解题难度也会成倍的提高,矿工就需要花费更多的时间去求解Nonce值,本实验为更加突出PoW共识出块速率低,调整了PoW求解Nonce值的难度。并在共识1600轮次时,再次提升成了难度系数,所以PoW平均共识消耗时间呈指数增长。

b)DPoS和PBFT整体不如CCAC共识效率快,取决于DPoS和PBFT共识机制本身。PBFT在达成消息一致性之前,需要进行一系列的准备阶段,而且达成共识至少要收到2n+1个相同的值,才能确保数据一致。而DPoS共识虽然解决了矿工节点选取问题,但是共识机制依赖于token,共识过程也相对复杂,影响共识效率。

c)CCAC共识机制没有PBFT繁琐的准备阶段,也没有DPoS复杂的共识流程,同时CCAC实行信用积分制和按轮次依次选择矿工,过程相对简化。

CCAC共识,每一轮次节点可获得的信用值范围在[1,1.5],若所节点诚实可靠,并且网络正常,每轮次节点可获得的平均信用值为1,所以整体上节点平均信用值增长比较稳定,符合图5表明的现象,同时也符合下图6,每轮次节点方差大小,体现了CCAC信用模型的稳定性,保证了一定的公平性,同时也达到激励节点的作用。

为进一步对节点信用值稳点性及可行性分析,针对矿工节点可能存在轮空记账的情况。网络中一共有10个矿工节点,随机设置3个节点隔轮次宕机,进行节点信用值分析。

下图7正常情况和存在轮空情况下节点的平均增长趋势,图7表明两种情况下节点信用增长都相对稳定,这也进一步表明信用评估模型的稳定性和可靠性。另外当仿真实验持续到100轮次左右时,会产生“寡头”节点,根据节点评估方法,所有节点信用会被重置,并根据节点评估信用,生成新一轮次矿工节点序列。

3.3可行性分析

本文提出的CCAC算法,将分别从容错性、可扩展性以及应用场景上进行分析。

a)容错性:本文结合信用评估,按轮次选择矿工节点,避免恶意节点通过刷信用来进行潜伏破坏共识,只要参与共识的拜占庭节点数不超过1/3,就保证系统能够达成一致性。另外本信用共识是基于联盟链设计,节点相对更稳定且更可靠,而且根据实验节点信用值数据显示,存在信用破坏的可能更低,且设计了节点信用评估公式,避免了“寡头”节点。

上一篇:在WHOFICs基础上对危重病人活动康复的文献综述下一篇:网络环境下汉语言文学经典阅读方法的探索与思考