基于DPoS共识机制的改进
2023-12-20谭敏生
夏 棋,谭敏生,朱 涛,丁 琳
(南华大学 计算机学院/软件学院,湖南 衡阳 421001)
0 引 言
共识机制是区块链的重要组成部分,它们负责维护区块链[1]的完整性和安全性,使区块链在一个互不信任的环境下各节点达到一致。DPoS共识机制利用权益持有者投票在平等和民主的基础上解决共识问题,为了提高性能,对去中心化做出了一定的妥协,导致了系统活跃度的降低和“弱中心化”的形成。DPoS共识机制采用链式存储结构,导致系统同步出块,降低了系统吞吐量。基于DAG图式的分布式账本[2]是不同于主流区块链的一种分布式账本技术,DAG技术给高并发的交易提供了最具前景的解决方案,把区块链二维的模式提升到三维,但其安全性和一致性的问题也亟待解决。针对DPoS共识机制的弱中心化,低吞吐量的缺陷,本文提出了一种全民评分选举、异步出块的共识机制模型。
1 相关工作
1.1 共识机制
共识机制是区块链的技术基石,解决了区块链如何在分布式场景下达成一致性的问题,实现了在非信任的环境下,传输可信信息和转移有效价值。现有区块链[3]系统中的主要共识算法是工作量证明、权益证明和委托权益证明。共识机制[4]可分为单一共识机制和混合共识机制,文献[5]对共识机制进行全面分析,将共识机制细化为7类,从各共识机制的去中心化、可扩展性、安全性、一致性、可用性、分区容忍性各方面建立了一套共识算法的评价指标体系[6]。
对共识机制地改进,是区块链技术研究的重点之一。Li等[7]提出了一种基于公平代表的基于委托的可扩展协商一致协议(DSCP)。Lixiang等[8]提出了一种基于信用奖惩的改进投票方法。文献[7,8]基于权益委托共识机制改进,但从根本上没有动摇权益在共识机制中的统治地位,权力依然被权益主导。文献[9]根据其信任值分为记账、验证和传播节点,动摇了权益的地位,但仍然采用同步出块。
DPoS共识机制[10]存在一定的局限性,Chen等[11]提出了一种基于概率语言术语集改进的DPoS共识机制,降低了恶意节点成为代表的概率,但是投票类型过于单一,不能充分体现一个节点的被信任程度。文献[12]提出了一种基于DPoS共识机制改进的一致性算法委托赌注证明算法;文献[13]采用元启发式算法对基于准则权重集的节点选择去中心化程度进行优化;文献[14]引入一个新的区块扩展方式,系统故障时提升了系统TPS,但系统正常运行时,TPS没有得到提升。文献[11-14]采用了同步出块方式,继续延用了原共识机制的记账方式,系统TPS与原共识机制一致,没有得到提升,文献[12-14]采用股民选举,权力被少数人享有,中心化程度过高。
1.2 基于DAG的区块链
文献[2]从共识形态出发将现有基于DAG的分布式账本分为3类:基于主干链的DAG账本、基于平行链的DAG账本、基于朴素DAG的账本。基于主干链的DAG的特殊区块链新模型SDAG[15],该模型使得交易数据的一致性和时序性优于链式结构,但是降低了系统的安全性,无法高效维持账本的一致性。基于信誉度的Hashgraph共识算法[16],设计了节点的信誉度模型,对节点的性能等进行综合评分。Q. Nguyen等[17]去除了信誉度模型,提出基于DAG的无信任系统达成PoS共识。文献[16,17]中充分利用了DAG异步记账的优点,但是DAG的无序性给系统带来了威胁,使系统中的账本无法获得统一。改进DAG的无序性,提升区块链的吞吐量成为了一种主流,文献[18]就提出了一种基于层的DAG结构,合理利用了DAG异步出块的高效性。
1.3 本文的主要工作
本文研究了DPoS共识机制已有特性及缺点,分析了DAG区块链结构的优缺点,比较了两种算法之间的特性,优化了区块链的单链结构。针对DPoS共识机制已有特性及缺点,摒弃了DPoS共识机制的权益选举以及同步出块,提出了一种改进共识机制,即评分权益证明(scored proof of stake,SPoS)共识机制。SPoS共识机制结合了DAG的优点,改进了DAG图式的无序性,采用了伪链的结构存储数据。
2 SPoS共识机制
SPoS共识机制是一种基于DPoS改进的共识机制,是一种评分授权的共识机制,将股民参与制改为全民参与制,去除了基于权益运作的方式,使每个合法节点都有权力参与投票,能够降低节点的参与门槛,积极推动节点的参与。系统节点分别为普通节点、候选节点以及超级节点。SPoS共识机制中每个普通节点对候选节点都有相同的评分权限,通过普通节点对候选节点打分,分数将产生相应的责任连坐,即责任双方会被任意一方的行为影响,受到相应的奖励或惩罚,然后计算评选出平均分加增益分高的节点成为超级节点。超级节点在出块周期内异步出块,并且广播、收集区块,最后将周期内所有普通区块统计到收束区块,周期结束时将系统数据达到共识。
SPoS共识机制可以分为4个阶段,即为评分、统计、公示和记账。评分阶段,节点根据对候选节点的信任程度评分;统计阶段,系统统计和计算候选节点的信任分;公示阶段,候选节点公示节点评分以及节点总分;记账阶段,超级节点异步出块达到共识。共识流程如图1所示。在SPoS共识机制中,引入责任连坐的奖惩机制,该机制贯穿系统的4个阶段,在评分阶段,对节点的行为进行责任相关标记,在后续阶段,若责任相关双方有作恶或诚实行为,将使双方受到相应的惩罚或者奖励。
2.1 评 分
SPoS共识机制中,在该阶段,每个拥有合法身份的节点对候选节点的信任程度进行评分,分数的高低决定责任连坐的轻重。SPoS共识机制中每个合法节点都享有相同的评分权,不存在节点贫富程度带来的权益差距,不需要代币股权的支持。在评分过程中,节点对候选节点的信任程度进行评分、签名,产生一个包含了身份与分数的Token,将Token发送给候选节点,并要得到候选节点的反馈信息。若候选节点表示接受投票,系统将对双方责任进行关联。SPoS共识机制对比DPoS共识机制将节省大量的股权证明开具时间,只需要验证节点是否为合法节点。区块链中合法公民都将享有公民投票评分权力,相对于改进前的DPoS共识机制,SPoS共识机制降低了节点投票的准入门槛,节点对候选节点的评分如算法1所示。
算法1:评分算法
输入:(Scroe,PrivateKey)
输出:null
(1)/*对候选节点评分*/
(2)初始化:Node /*评分节点*/;
(3)if Node is lawful:
(4)then token←rsa.Encrypt(Score,PrivateKey) /*私钥加密分数*/
(5)send token to candidate /*将token发送给被支持者*/
(6)wait result←callback(candidate)
(7)if result == true: /*判断投票是否成功*/
(8)then voting success and mark /*投票成功,并且责任相关*/
(9)else:
(10)if candidate is illegal:/*候选节点非法行为时*/
(11)then decrease candiate weighted/*惩罚候选节点*/
(12)else:
(13)again voting(candidate)
(14)end if
(15)end if
(16)else://评分节点非法时
(17)decrease Node weighted//惩罚评分节点
(18) end if
(19)end
2.2 统 计
评分结束过后,将关闭评分通道,验证候选节点的分数真实性,统计评分阶段中选取的候选节点分数。在该阶段,每个候选节点都持有其它节点的Token,依次验证候选节点所持有的Token,无效Token将被删除,并降低无效Token签名者的权重值。如果公示阶段候选节点仍持有无效的Token,该节点将被剔除候选节点队伍,并根据责任连坐制度惩罚该候选节点及其支持者,剩下的可信节点将进入到下一阶段。
经过验证的有效Token,将被统计计算,评选出平均分加增益分高的候选节点成为超级节点。平均分采用算术加权平均,该分值能显示出选民对该节点的平均信任程度,但是恶意节点的非法评分,会对节点分值的可信度产生影响。为了防止恶意节点的非法行为影响分值的可信度,设计增益分weighted(x), 增益分是根据节点评分达优的人数计算,当某个节点的评分达优人数过少时,系统认为其可信度低,此时增益分为负值,将降低节点的可信度。为了防止节点的支持者过少却能获得记账权的情况,将节点评分与其权重相乘得到的加权分达优的支持人数换算成相应的增益分,该分数极大地提升了节点的可信度。只有节点评分达优的人数达到一定的数量,该分数才会为正值并对其增益,反之对节点分数进行降低。增益分的存在减少了恶意节点行为对系统的影响,增加了节点分数的可信度。经过验证的评分将与节点自身权重weighted加权处理,得出该候选节点最终的分数。分数高的节点,可以被认为是优质的值得被信任的节点,换算如式(1)所示
(1)
及格线以上总人数对应的权重如式(2)所示
weighted(x)=MlogmAx
(2)
(3)
式(3)的推导如式(4)~式(6)所示
(4)
(5)
(6)
(7)
式(7)说明weighted(x) 随人数的增加,上升越来越平缓,weighted(x) 导函数如图2所示。
图2 weighted(x)导函数
由图3所示,人数的增加对分数的增益无限,但是人数的增加对节点信任分数的增加会越来越平缓,人数高达一定值时对信任的增值微乎其微。 weighted(x) 对节点的分数有所增益,人数达不到指定要求反而会降低节点的可信度,但是人数过多,人数增量只能增加越来越少的节点可信度,该公式表达的人数增益如图3所示。
图3 人数增益分趋势
本文基于式(1)提出的新评分算法,能够准确反应一个节点的可信度,将Tokens作为算法的参数输入,算法将解密、统计Tokens,最后返回基于式(1)换算的候选节点分数,具体过程如算法2所示。
算法2:信任程度统计算法
输入:(Tokens)
输出:(TotalScore)
(1)/*统计候选节点的分数*/
(2)初始化:K /*K为节点的tokens有效token总数*/;
(3)var temp /*记录分数总值*/
(4)var passedPersonNum /*及格人数权重*/
(5)for k←1 to K do /*统计所有节点评分总和*/
(6)do onceScore←decrypt(Tokens[k])
(7)temp += onceScore
(8)if onceScore is passed: /*分数及格的将被统计到人数权重中*/
(9)do passedPersonNum ++
(10)end if
(11)end for
(12)score←(temp/Tokens.length+
MlogmA*passedNum)*weighted/*式(1)处理*/
(13)return score
(14)end
2.3 公 示
该阶段被选举出来的候选节点将持有的所有Token进行公示,以防止恶意节点选择性算分,过滤低分,选择高分,从而增加平均分的权重。评分节点分为支持者与反对者,根据评分的大小,与其支持的候选节点将产生对应的责任。被举报成功的节点将失去记账权,下次共识选举中降低该候选节点的权重,并将节点列为不可信节点,其评分者也将根据对节点的评分大小受到相应的处理,惩罚支持者,奖励反对者。反之,候选节点将成为超级节点,并且在任职期诚实工作,其评分者依然会根据分数得到相应的惩罚与奖励,公示过程具体如算法3所示。
算法3:公示算法
输入:null
输出:null
(1)/*公示阶段*/
(2)初始化:T, Node /*T为公示期的时长, Node为被公示的节点*/;
(3)listen←net.Listen()
(4)time.After(T,EndProgram()) /*T时间后, 结束程序。*/
(5)while true:
(6)do connNode←listen.Accept() /*监听节点的举报*/
(7)if connNode is doubted:
(8)then if connNode is honesty:
(9)then delete Node /*从候选节点队列删除该候选节点*/
(10)decrease Node weighted /*惩罚该节点*/
(11)decrease or reward Node Supporter/*奖励或者惩罚该节点的评分节点*/
(12)else:
(13)decrease connNode weighted /*降低举报节点权重*/
(14)end if
(15)end
2.4 记 账
该阶段,每个超级节点可生产两种区块,分别为普通区块与收束区块,普通区块的作用是存储系统数据,而收束区块的作用是将该周期内生成的普通区块收束为一点。两种区块的结构与DPoS区块结构对比见表1。
表1 区块结构
针对DPos共识机制的单一队列出块,后续节点都在期待上一节点出块,若节点宕机无法出块,后一节点将处于期待状态,超时下才会解除该状态,并且使用上一成功出块节点结果打包出块。针对以上缺点,本文提出全队列出块,在每个出块阶段,所有超级节点异步出块,同时在该阶段验证其它节点所出区块,如果有节点宕机、超时未出块,各节点将统一周期内生产的普通区块,以达到共识。阶段结束时,将生产一个收束区块记录该阶段出块的所有普通区块。为满足异步出块的形式,本文弃用了区块链的单链结构,采用基于DAG图式改进的有序伪链结构,将DAG的无序状态转换为有序状态,能够延续单链结构安全性的同时兼顾DAG图式的高吞吐量,区块链结构如图4所示。
图4 SPoS链式结构
每个超级节点同时享有记账权限,如果节点宕机,超时未出块,系统将自动跳过该节点,对节点的行为进行评价、记忆,并且在下次选举过程中惩罚该节点。SPoS共识机制采用周期制异步出块,在周期内,超级节点打包、广播普通区块,监听、接收其它超级节点广播的普通区块,并且统计普通区块生成收束区块,周期结束时广播、统一收束区块,SPoS共识机制的异步出块如算法4所示。
算法4:异步出块算法
输入:null
输出:null
(1)/*出块阶段*/
(2)初始化:T/*T为每个出块周期的时长*/;
(3)var sumBlock /*创建、 初始化收束区块*/
(4)time.After(T.BroadcastAndUniteSumBlock()) /*周期结束时广播、 统一收束区块*/
(5)listen←net.Listen()
(6)block←PackAndBroadcastBlock() /*节点自己生成、 广播普通区块*/
(7)AddTo(block,SumBlock) /*将普通区块记录到收束区块*/
(8)while true:
(9)block = listen.Accept()
(10)if block is legal:
(11)then AddTo(block,SumBlock)
(12)else:
(13)FeedbackToSystem(block) /*block不合法时, 向系统举报该区块生产节点*/
(14)end if
(15)end
3 实验分析
3.1 实验环境
本文实验在处理器Intel Core i5-4200HCPU@2.80 GH的64位Windows10专业版与Intel Celeron CPU N3450@1.10 GHz的64位Windows企业版平台进行,采用golang语言进行区块链构建,tcp协议进行P2P网络传输,RSA加密算法生成密钥、签名、验证数据,电脑端口模拟节点,实验共模拟100个节点。
3.2 数据分析
(1)去中心化
SPoS共识机制中,每个节点都不需要提供代币及股权证明,各节点享有平等的评分权限。SPoS共识机制比DPoS共识机制门槛更低、权力更平等、去中心化程度更高。DPoS的参与度理论上最高能达到系统拥有股权节点的百分比,SPoS共识机制的参与度理论能够达到百分百。与原共识机制相比,本文提出的共识机制中全体合法公民享有更加平等的选举权,系统更加活跃与去中心化,共识机制性能指标对比见表2。
表2 性能指标对比
(2)资源消耗
DPoS共识机制需要代币及股权的维持,持股节点的数量与代币交易的总量越多,内存的消耗越多,股权证明花费的资源将大幅提升。改进的SPoS共识机制本身是不需要代币及股权的支撑,SPoS共识机制对比DPoS共识机制将节省更多的内存资源以及查询时间。SPoS共识机制的参与门槛低,系统节点活跃的数量急剧增加,使消耗的网络资源大幅提升。系统模拟DPoS共识机制30%、40%、50%的节点拥有股权,分别采用256 bit、512 bit、1024 bit、2048 bit、4096 bit的密钥进行网络信息交互,实验结果如图5所示,SPoS共识机制网络资源比DPoS共识机制分别多消耗230%、150%、100%。DPoS共识机制中拥有股权的节点占比越高,去中心化程度越高,与SPoS共识机制消耗的资源差额越小。
图5 网络资源消耗
(3)共识时延
实验模拟100个节点,在区块高度分别为10 000、5000、2000的SPoS共识机制和DPoS共识机制中共识选举10个记账节点,每个区块高度均实验了多次,最后对实验数据进行求平均值处理。实验结果表明,不同区块高度中SPoS共识机制共识时延不变,区块高度5000、2000时,SPoS共识机制的共识时延是高于DPoS共识机制,随着区块高度的增加和交易的产生,SPoS共识机制的共识时延明显短于DPoS共识机制。随着系统冗余度的提升,DPoS共识机制开具权益证明的时间越来越长,SPoS共识机制的优势会越来越明显,数据高冗余时,共识时延提升了45%左右,实验结果如图6所示。
图6 共识时延
(4)出块时间对比
实验设定10个超级节点,每个节点具有相同的出块周期。DPoS共识机制在每个出块周期随机排序出块队列,队列中的节点依次出块。SPoS共识机制在出块周期内,超级节点异步同时出块。每次实验都采用相同初始环境,并且对最终结果进行数据处理及分析。实验结果表明,在每个出块周期内两种共识机制都能保持稳定的吞吐量,SPoS共识机制队列中超级节点异步出块,每个出块周期都能将区块收束到收束区块,相对于DPoS共识机制节省了队列排序时间与等待其它节点出块时间,SPoS共识机制的出块时间明显优于DPoS共识机制,SPoS共识机制中平均每个区块的出块时间缩短40%左右,实验数据如图7所示。
图7 出块时间
(5)容错性
为比较共识机制容错性,即区块链系统部分节点宕机时单位时间出块数量,实验模拟10个超级节点,在超级节点宕机概率保持不同的情况下,比较系统的吞吐量。在实验中节点的宕机概率依次提升,每个宕机率进行多次实验,最后对比节点出块时间。实验结果表明,随着宕机概率的提升,两种共识机制的出块时间成爆炸函数增长,但SPoS共识机制在系统宕机的情况下明显比原共识机制更能保持系统吞吐量的稳定,而且这种优势会随着宕机率的提升越来越明显,实验结果如图8所示。
图8 宕机稳定性
4 结束语
为降低DPoS共识机制的中心化和提高系统吞吐量,本文提出了一种高并发、去中心化的共识机制。本文提出的SPoS共识机制中,合法节点均享有参与选举的资格,选举中根据节点身份进行责任连坐,去除了权益的统治地位,提升了系统去中心化,规范了节点行为,能够更好地服务于有身份认证的区块链系统。基于DAG图式的伪链结构,创新了存储结构,解决了DAG图式结构的安全性问题,保证了系统高并发运行。但是,SPoS共识机制消耗的网络资源多于DPoS共识机制,对网络的稳定和带宽有更高的要求。下一步,我们将研究降低该共识机制对网络资源的消耗,并探索共识机制的实际应用。