陈海宇
(肇庆医学高等专科学校 公共卫生学院,广东 肇庆 526020)
知识经济的发展推动着基于区块链的知识共享技术得到快速发展,而实际的知识共享网络是一种难以利用固定的时间假设来描述的异步网络。[1-2]同时当前的知识共享算法很难满足区块链知识共享的吞吐量、安全性等要求,[3-4]因此对现有的知识共享算法进行改进势在必行。李启南等为解决主节点在发生错误时导致吞吐量降低的问题,通过引入新的区块拓展对传统的快速热材料(Fast-Hot Stuff)算法进行改进。[5]Philsoophian M等对供应链管理中知识共享存在的安全性问题,通过运用结构方程模型来改进了供应链知识共享的相关实践。[6]钟增胜为提升区块链系统的整体性能,通过引入智能合约的相关方法对传统的权益证明(Proof of Stake,PoS)共识算法进行了改进。[7]在此背景下,研究针对区块链知识共享中的相关问题,通过引入有向无环图(Directed Acyclic Graph,DAG)算法对传统的原子广播协议(Dumbo)算法进行了改进,提出了DAG-Dumbo算法,并针对分片区块链的安全性问题提出了在信任优化基础上购进的自适应分片算法,旨在提升知识共享经济时代下区块链的异步环境适应能力以及提升区块链知识共享时的安全性。
区块链的链状结构能确保信息的不可更改性,但也会损害其运行速度。在区块链系统中,由某种原因引起的操作错误、系统崩溃、恶意攻击等都会引起系统错误,这样的错误被称为拜占庭错误。[8]在异步网络环境下,节点超时的原因难以被区分,该网络更加符合网络真实环境。当前,Dumbo算法是表现效果最好的异步拜占庭共识算法,能最大化利用网络环境,从而更快达成共识,该算法的流程如图1所示。[9]
图1 Dumbo算法的流程结构
如图1所示,Dumbo算法在广播阶段,各节点会由客户端发来的交易txi向其余节点广播,并将收到的txi放置在缓冲区。在共识阶段,各节点在缓冲区选择一个交易集合,将会运行ABA协议让节点达成共识。多值验证拜占庭协议(Multi-value Validated Byzantine Agreement,MVBA)使用了一个外部验证,其通过判断消息与外部验证的符合情况,从而判断出消息的合法性,并移除了信息矩阵。[10]MVBA算法一开始就会先进入消息同步阶段,然后将各节点所提交的建议信息进行传递。MVBA算法的通信复杂度计算表达如式(1)所示。
O=(n|m|+λn2)
(1)
在式(1)中,λ代表领导者,m为在预备阶段,λ收到的来自客户端的信息,n为λ为消息m分配序号。Dumbo算法选择自传入消息的标记,即消息的id。为避免传入虚假的id,研究引入可证明的可靠消息传播算法PRBC。通过收集各节点对消息确认信息的签名,来确保每条消息正确有效,并保证每条消息至少被一个诚实节v点接收过。PRBC能够满足的性质包括简短性、完整性、有效性,以及一致性。其中,一致性的解释是若一个城市节点输出为v,则其他的城市节点v′输出结果如式(2)所示。
v′=vi
(2)
式(2)为在第i轮次中城市节点的输出。在PRBC中使用无线承载控制(Radio Bearer Control,RBC)算法时,节点Pi将收到的交易消息分为n-f块,并将此类小块与2f个纠删码块组合为广播集合,其表达如式(3)所示。
(3)
在式(3)中,M为广播的集合,m与c均为纠删码。在消息传递时,M中的各消息块被节点Pi传送给网络中的各节点。当其他节点收到Pi传来的消息块时,又会将该消息块发送给另外的节点。在收到n-f个消息块时,该节点会根据纠删码对原始消息进行修正并校验。若Echo消息被正确地广播,当收到足够的Echo消息时,即表示该消息被确认。尽管Dumbo算法具有较好的安全性与共识速度,但该算法串行完成两个阶段流程仍然会降低其整体运行效率。有向无环图(Directed Acyclic Graph,DAG)没有区块的概念,其构成单位是一个个的交易,各单位均记录着单个使用者的交易,以此来节省打包出块的时间。因此研究引入有向无环图DAG共识算法。[11-12]图2为使用DAG-Dumbo算法的算法工作流程。
图2 基于DAG的改进Dumbo算法流程
如图2所示,DAG-Dumbo算法被分为消息广播与共识阶段两部分。在共识阶段,会对从广播阶段收到的交易形成共识。同时,在各交易块中产生一致的实例,以MVBA为基础,实现了多个实例之间的并行运算,用以优化交易的处理效率。当交易到达各节点后,会对其进行排序、标记,并将交易存入缓冲区。将缓冲区根据交易状态分为等待区和多个共识区,以此来区分不同轮次共识的交易。在消息传播阶段,仅接收新交易并对其排序。在共识阶段,仅对被打包的交易进行共识协商。此时,各轮次的共识阶段均独立,可以同时执行多个协议。并且在协商过程中,与信息传播相比,通信的复杂性更大,所以多个协商阶段的并行操作可以提高区块链的吞吐量。
尽管DAG-Dumbo算法对提高区块链的吞吐量有一定帮助,DAG的异步通信机制在提高可扩展性、缩短确认时间、减少成本等方面优势明显,但其安全性、一致性等问题也亟待解决。因此,提高区块链的扩展性尤为重要。分片技术作为一种区块链横向扩展方法,已被广泛应用于区块链扩容中。[13]为解决分片方法无法适应知识共享环境的问题,研究提出一种新的区块链分片算法,即RapidChain分片算法,该算法的流程如图3所示。[14]
图3 RapidChain分片算法流程
如图3所示,该算法由多个时代组成。在起始时代中拥有额外的启动阶段,且每个时代都可分为共识阶段与重新配置阶段。在RapidChain启动阶段,首先会进行根组的选举,由其决定参考委员会成员。经过多轮组合与选举,选出最终的根组。每一个时代的开始即共识阶段,该阶段会对交易进行处理,将其分为分片内部与跨分区交易。其中,分区交易只会运行组委会内部公式协议,并将交易记录到成员维护的区块链中。在重新配置阶段,会为该时代加入的新节点分配委员会,并重组各委会。虽然RapidChain分片算法能够提高区块链的吞吐量,但由于该算法中各委员会所含的节点较少,这也将导致区块链的安全性减弱。为此,研究为共识节点设置一系列活动状态,使其在系统中拥有完整的生命周期,且实现节点可动态地加入和退出,该算法即是基于节点历史行为的信誉值评估方法。[15]由节点参与共识的历史行为来对区块链中节点的信誉进行决定。研究给定节点历史行为的轮次衰减因子为wforget,在时代e的后验分布的参数中,待遗忘参数的计算如式(4)所示。
(4)
(5)
在式(5)中,E(θ1)与E(θ3)分别为节点做出正确与错误行为的期望。将式(4)代入式(5),可得到遗忘参数的节点历史行为分数计算表达式,如式(6)。
(6)
由式(6)的信誉计算方法可使历史投票的日志信息为各节点计算其信誉分数。研究给定一个阈值α和β,将比β小与比β大的阈值分别定义为恶意、正确节点。并将节点大小位于α、β之间的定义为待考察节点。在委员会内部,共识算法通常为投票类的BFT共识算法,维持委员会规模稳定的同时,也能提高各委员会正确的节点占比。在研究中,将wforget定义为信誉算法的轮次衰减因子。在经过无穷时代后的信誉值,即当轮次e→∞时,其计算表达如式(7)所示。
(7)
在式(7)中,i为轮次,e代表时代。当各个时代加入的样本N相同时,将式(7)代入式(4)可得到式(8)。
(8)
为验证DAG-Dumbo算法和ProRapidChain算法在区块链知识共享中的有效性,研究对二者的性能分别进行了分析。研究首先对DAG-Dumbo算法的吞吐量、带宽与吞吐量的关系,以及节点数量与交易处理时间延迟的关系进行了分析。其中,针对DAG-Dumbo算法来讲,研究默认测试时的带宽为2000k比特/秒(bit/s),实际事务的大小为10bit,测试的全部结果都为执行10次以后的平均数值。结果如图4所示。
图4 两种算法在多个指标关系下的对比结果
由图4(a)可知,两种算法随着批量大小的增加,吞吐量都呈平滑上涨趋势,但比较明显的是DAG-Dumbo算法的吞吐量明显高于Dumbo算法,测试结果前者比后者高约25%。由图4(b)可知,两种算法均因带宽不同而产生不同程度的性能差异。其中,Dumbo算法在带宽达到3000 k bit/s后,其吞吐量基本不会受到带宽的影响,但是DAG-Dumbo算法的吞吐量仍有提高。在带宽达到3500 k bit/s后,这两种算法的吞吐量都比较稳定,DAG-Dumbo算法的吞吐量大约提高了35%。从图4(c)可以看出,在相同条件下,DAG-Dumbo算法的时间延迟明显低于Dumbo算法,其最高不超过2 s。综合来看,DAG-Dumbo算法在多个循环的情况下有效地改进共识阶段的并行,从而大大提高了原有算法的吞吐量,同时其对网络带宽的准备更为充足,时间延迟更低。这表明了DAG-Dumbo算法具备较高的性能,改进是有效的。同时,针对ProRapidChain算法性能验证实验,首先,研究对比测试了不同算法的吞吐量,结果如图5所示。
图5 四种算法在吞吐量上的对比结果
由图5可知,RapidChain算法和ProRapidChain算法随着节点数目的不断增多,时代平均吞吐量也随着增长,而DAG-Dumbo和Dumbo则呈现相反的趋势。RapidChain和ProRapidChain对比中后者明显高于前者的时代平均吞吐量,ProRapidChain在时代数量为5时的时代平均吞吐量达到了9×104(tx/s),远高于RapidChain的8.8×104(tx/s)。在此基础上,研究继续验证了改进算法鉴别网络中全部恶意节点的实际性能,结果如图6所示。
图6 ProRapidChain算法鉴别网络中全部恶意节点的实际结果
由图6可知,随着信誉分的增长,恶意节点、故障节点以及正确节点三个指标频次都呈现先增后降的趋势,并且恶意节点以-0.20为节点、故障节点以0.20为节点、正确节点以0.90为节点。综合来看,经过一千次的投票,网络中的信任分配有明显的差别。其中,节点信任度呈现出正确的频次最高。另外,通过分析得出的阈值和信誉值可以识别出几乎全部恶意节点、50%的错误节点以及大部分的正确节点,证明ProRapidChain可以有效地抵御带有伪装的敌人的实际攻击。最后,研究分析在新节点增加与多个循环的情况下,ProRapidChain根据节点的动态变化划分出各个委员会的正确结点所占比例。结果如图7所示。
图7 ProRapidChain划分各个委员会的正确结点所占比例
由图7可知,每一个委员会的正确结点比例都接近于整个网络的正确结点,且在新产生的委员会中,正确的结点比例也非常高。同时,虽然在所有的节点中正确的节点比例接近三分之二,但各个委员会最终的正确节点数维持在88%左右。综合来看,改进后的ProRapidChain算法在性能和安全性上相较于原始算法具备更高的优越性,同时也有效地提升了区块链对实际资源的实际利用率,表明其具备更高的有效性。
为解决目前异步网络环境下区块链支持不足、运行效率低下等问题,研究将有向无环图DAG引入到Dumbo算法中,提出了DAG-Dumbo算法。并为提高区块链效率、安全和动态网络适应能力,提出了ProRapidChain算法,同时对二者性能进行了实验分析。实验结果表明,在DAG-Dumbo算法性能验证实验中,DAG-Dumbo算法的吞吐量比Dumbo算法高25%,DAG-Dumbo算法在带宽达到3000 k bit/s后仍有提升,而Dumbo算法已经变化稳定,同时DAG-Dumbo算法时间远低于Dumbo算法。在ProRapidChain算法性能验证实验中,ProRapidChain在时代数量为5时的时代平均吞吐量达到了9×104(tx/s),远高于RapidChain的8.8×104(tx/s)。同时ProRapidChain算法可以识别出几乎全部的恶意节点,且各个委员会最终的正确节点数维持在88%左右,比例明显比较高。综合来看,研究提出的改进后的DAG-Dumbo算法和ProRapidChain算法在性能上优于原始算法,有效提升了区块链异步共识中的效率以及动态的网络适应能力。但研究对当前异步共识算法的研究还存在不足,其内部并未存在领导节点,限制了异步共识的使用,因此需要在后续对其进行改善。