基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案的实现方法与流程

文档序号:22390796发布日期:2020-09-29 17:56阅读:182来源:国知局
本发明属于数据库和密码学领域,涉及区块链、智能合约、交易并行以及并发控制等技术,特别涉及一种基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案的实现方法。
背景技术
::区块链即一系列区块,每个块中包含一段时间内的所有交易数据,以及前一个块的哈希值,类似于传统的公共总账,区块链是一种分布式的数据库,用于在无中心节点时记录由许多节点维护的交易数据。区块链按不同的应用情况可分为公有链、联盟链和私有链。联盟链是“部分去中心化”的,节点的加入需要获得某个特定机构的授权,如tendermint,但联盟链中的节点并不完全可信。部署在联盟链上的应用在吞吐量和延迟方面需要较高的性能,比如金融应用程序需要每秒处理数万个请求且要求非常低的等待时间。智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。智能合约作为部署在区块链上的代码,由交易双方共同签名发布,一旦条件满足就可自动去执行,保证了交易执行的公平性。智能合约在执行的时候具有事务性的需求,也就是说合约的执行需要满足原子性、隔离性、一致性和持久性这四个特性。并发控制在数据库中主要用来确保在多个事务同时对同一个数据项进行操作时不会造成数据结果不一致的结果。多版本并发控制允许系统记录一个数据的多个版本,这样事务可以读取在他进行读取前已经存在的数据,即使在他读的过程中数据被别的事务进行了修改也不会对该事务造成影响。实用拜占庭容错算法(practicalbyzantinefaulttolerance,pbft)用于构建容忍拜占庭故障的高可用系统,拜占庭容错(byzantinefaulttolerance,bft)问题是区块链共识中需要解决的一个核心问题,工作量证明(proofofwork,pow)、权益证明(proofofstake,pos)、委托权益证明(delegatedproofofstake,dpos)等共识算法解决的是节点众多的情况下的bft,而pbft适用于联盟链等节点较少的情况下的共识。技术实现要素:本发明的目的在于克服现有技术的不足,提供一种基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案的实现方法,解决冲突较多环境下联盟链交易处理方式的性能低下的问题,同时降低共识过程的复杂度,使联盟链系统在不同冲突环境下均可并行执行交易且产生确定性的结果同时维持较好的性能。本发明解决其技术问题是通过以下技术方案实现的:一种基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案的实现方法,其特征在于:所述方法的步骤为:s1、发送交易请求,排序节点采用基于环形拓扑的拜占庭容错共识协议对不同应用程序的交易顺序达成一致并将交易打包成区块,根据区块内交易构建交易间的依赖关系图;s2、执行节点在收到排序节点发来的区块及依赖关系图后,区块广播到所有执行节点,依赖关系图生成及广播到所有执行节点;s3、有块内交易执行权限的执行节点根据依赖关系图进行交易的并发执行;s4、执行结果广播之后所有执行节点进行交易的验证及区块链状态的更新;s5、通过实验,评估对联盟链交易并发方案效果进行验证。而且,所述步骤s1的具体操作为:检查客户端发送的请求是否合法,对合法的请求进行排序、构建块,联盟链系统中节点采用基于环形拓扑的拜占庭容错共识协议达成共识的过程;rtbft协议在消息传输过程中使其携带f+1个用发送节点私钥签名后的包含消息,发送节点地址以及发送节点之后f+1个节点的地址的数组;当消息到达出口节点时,出口节点发送一条ack消息,收到ack消息的节点可将其本地维护的列表中的交易标记为stable,若此时该交易具有最小的编号,则节点将这笔交易加入区块及依赖图中,该过程保证了所有节点生成的区块内的交易顺序的一致性。而且,所述步骤s2的具体操作为:将排序节点按照达成共识后的块内交易顺序在传输包含时序的交易区块时并行的进行该块内的交易依赖关系图的生成与传输,在本地维护一个线程池,通过多线程并行处理不同块的生成及块内依赖图的构建,将块的生成与依赖关系图的构建分开,使得排序节点可以在进行依赖图构建的同时生成下一个区块。而且,所述步骤s3的具体操作为:执行节点在收到指定数量的块及其依赖图的合法消息之后,进入执行阶段;在该阶段,执行节点按照收到的依赖关系图进行交易的并发执行,当执行节点收到排序节点发送的新块消息以及该块的依赖关系图的消息之后,对消息的签名及哈希值进行验证,如果消息是合法的,执行节点将消息记录到本地;同时,执行节点也会检测该区块内的交易涉及的应用程序的集合a,判断新区块内是否有需要自己执行的交易。当执行节点收到f+1个新块的消息之后会进入执行验证阶段。而且,所述步骤s4的具体操作为:执行节点在收到一定数量的执行节点的提交信息之后更新区块链状态;如果一个执行节点在收到块之后,发现自己不是块内任何一个交易的代理,那么只需等待其他执行节点将他们的执行结果提交后记录相应交易被提交的次数,等该节点收到一定数量的其他节点的对该交易的提交消息之后,可以认为这个交易通过了网络上所有节点的验证,该节点可以据此更新自己本地的区块链状态。而且,所述步骤s5的具体操作为:采用区块链系统每秒处理的交易数作为评价指标,采用20个节点多次运行后的平均结果为最终的实验结果以消除实验误差,其中包含10个排序节点和10个执行节点。本发明的优点和有益效果为:1、本发明所述适用于联盟链的面向冲突环境的交易并发方案是基于环形拓扑、依赖图和多版本控制的交易并发方案,采用先排序再并发执行的交易处理方式,包含排序和执行两个阶段,在排序阶段,排序节点采用一种基于环形拓扑的拜占庭容错共识协议确定块内交易顺序以降低共识过程的复杂度,且其按照交易的读写集构建依赖图并采用多版本并发控制技术,仅保留交易间先写后读的冲突关系,实现了更细粒度的并发,同时,排序节点采用了并行的方式进行块及其依赖图的传输,降低了传输过程的通信开销;在执行阶段,执行节点根据本地维护的块内数据项写操作的不同版本以及依赖图进行块内交易的并发执行与验证,保证执行结果的正确性。2、本发明通过实验证明,基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案在不同程度的冲突环境中都可以具有较好的交易处理速度。3、本发明基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案能够解决冲突较多环境下联盟链交易处理方式的性能低下问题,同时降低共识过程的复杂度,使联盟链系统在不同冲突环境下均可并行执行交易且产生确定性的结果同时维持较好的性能。附图说明图1为基于环形拓扑、依赖图和多版本控制的交易并发方案交易处理流程图;图2为不同冲突率的实验评价指标表。具体实施方式下面通过具体实施例对本发明作进一步详述,以下实施例只是描述性的,不是限定性的,不能以此限定本发明的保护范围。一种基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案的实现方法,如图1所示,其特征在于:所述方法的步骤为:步骤s0101:客户端c向任意排序节点i发送一笔交易请求并对该请求消息msg进行签名,即<request;op;a;tsc;c;i;hc>σc,用来代表客户端c向节点i发送对应用程序a的操作op的请求。消息中同样附带数组hc,数组中各项由客户端用私钥对包含其选择的节点i在内的按序排列的f+1个节点的地址与自己的地址及发送的请求的签名构成,如公式(1)所示:步骤s0102:收到客户端请求的节点i(入口节点)首先会判断请求的合法性,若合法,处理附带数组hc中接收方为自己的数据并更新数组为hpi,签名后将消息<req;msg;id;i;hpi>σpi沿着环形网络传输给后序节点,其中id为请求的编号,在遇到定序节点之前保持为-1,到达定序节点后由定序节点给其编号,i为入口节点的节点编号。一般情况下,定序节点为p0。步骤s0103:网络中的每个节点在收到消息之后,首先验证消息是不是由自己的前序节点发送,如果是,就遍历消息附带的数组,找出接收方为自己的f+1条数据,确认消息未被篡改,删除这f+1条数据,在之后加入发送方为自己,接收方为自己的后f+1个节点的数据,签名后将消息沿环转发出去。如果此时消息已经带有编号,那么节点根据编号将该消息放入本地维护的消息列表的正确位置。步骤s0104:如果收到消息的节点为定序节点,则定序节点根据收到消息的顺序对其进行连续编号,即修改消息中的id数据域。定序节点本地维护一个计数器,每收到一条新消息,计数器加1。规定编号id从1开始。其他节点本地维护的计数器用来统计当前已处理的消息数。步骤s0201:在本发明所提出的方案中,两个交易之间的冲突依赖关系只存在于先写后读的情况中,给定一个区块中的交易集合t,则该区块的依赖图可表示为g=(t,e),其中t={t1,t2,t3...tn},e={(ti,tj)|tj>ti,tj∈t}。步骤s0202:在构建依赖图的过程中,每一个数据项都有一个对应的操作支配集ψ(k)和最近写操作集l(k),其中k是交易涉及的数据项,具体定义如公式(2)和公式(3)所示:支配集ψ(k)仅包括最近一次对数据项k进行写操作的交易,即在该交易写之后没有其他交易对数据项k进行任何操作或者是在最近写操作之后一系列对数据项k只进行读操作的交易。所以通过维护支配集ψ(k)(包括)插入交易tj的时候只需要分析ψ(k)中的相关元素即可确定如何将tj插入依赖图g。步骤s0203:交易的时间顺序为:ts(t5)<ts(t1)<ts(t6)<ts(t2)<ts(t8)<ts(t3)<ts(t4)<ts(t7)所以各排序节点达成共识后块内交易的顺序为:此后,排序节点按照达成共识后的块内交易顺序构建交易之间的依赖关系图。步骤s0204:t4中包含数据项a,且对a进行读操作和写操作。通过查看ψ(a)和l(a)可知,ψ(a)内现在保存的交易是t3且t3对数据项a进行的是读操作,故需要从l(a)(t5)中新增一条从t5指向t4的边,更新ψ(a)使其仅包含最近的写操作的交易t4,同时更新l(a)为t4,至此交易t4处理完毕。步骤s0205:接着处理交易t7,t7包含两个数据项b和c。对于数据项b,ψ(b)内为t2且是最近写操作,而交易t7对b进行的是读操作,所以需要增加一条从t2指向t7的边代表他们之间的依赖关系,同时更新ψ(b)使其仅包含交易t7。步骤s0206:对于数据项c,ψ(c)内包含交易t3且t3是数据项c的最近写操作,交易t7对c进行的也是读操作,所以同样需要增加一条从t3指向t7的边代表他们之间的冲突依赖。至此,块内交易之间的依赖关系图构建完成。步骤s0301:执行节点在收到指定数量的块及其依赖图的合法消息之后,进入执行阶段,执行节点按照收到的依赖图进行交易的并发执行,用pre(ti)表示交易ti的所有前序节点,用succ(ti)表示交易ti的所有后序节点。形式化定义如公式(4)所示:给定依赖图步骤s0302:为交易ti中涉及的每个数据项维护一个从当前块开始处理到目前为止所有不同的版本。之后,若遇到读操作,只需从自己本地维护的状态中查找到合适的版本进行读取即可。步骤s0303:将读取的数据项(x)及其版本(x,version)添加到对应交易的结果集resultset中;若遇到写操作,那么执行节点需新增一条记录(x,newvalue,version)到本地维护的该数据的不同版本中,表示交易ti将数据项更改为newvalue,然后将该记录同样添加到交易ti的结果集resultset中。步骤s0304:交易ti处理完毕之后,将交易编号及交易处理结果(ti,resultset)添加到该执行节点en的已执行交易集合excuteseten中。步骤s0401:节点en在进行区块内交易处理时,首先检测到需要其执行的交易为t5,t1,t6,t3,t7,所以en将这5个交易加入其待执行交易集,即waitseten={t5,t1,t6,t3,t7}。步骤s0402:检测待执行交易集,发现此时有两个交易t5和t1可以执行,所以节点en采用两个线程并行进行交易t5和t1的执行。步骤s0403:en检测到所以en处理t5。t5执行结束之后,节点en会测t5的后序节点集succ(t5)={t2,t3,t4},发现其后序节点中存在自己不被允许执行的交易t2和t4,如果此时节点en已经执行完交易t1和t6,他就需要广播一条包含t5,t1和t6的执行结果的commit消息给所有其他的执行节点,然后等待其他节点广播的包含t2(t4)的执行结果的commit消息,当节点en收到指定数量的其他节点发来的交易t2(t4)的相同执行结果的消息后,更新区块链状态,同时将交易t2(t4)加入已提交集合commitseten。en在将包含交易t5、t1和t6的执行结果的消息广播出去之后会继续查看此时的待执行交易集waitseten={t3,t7},发现t3可以执行,所以en进行交易t3的处理。现在待执行交易集中只剩下t7,节点en检测t7的前序节点集pre(t7)={t2,t3}此时t3已执行完毕,所以t3在excuteseten中,若此时节点en已收到指定数量有效的包含t2的消息,那么此时t2在commitseten中,节点en可以进行交易t7的执行。否则,en需要等待其他节点广播的消息直到t2可以被加入commitseten为止。在t7执行结束之后,此时excuteseten只有t7,所以节点en将t7的执行结果广播出去步骤s0404:当节点en发现当前区块中所有的交易都在已提交集合commitseten中时,节点en完成了本次区块的执行验证及状态更新,达到了和其他节点维护的区块链状态一致的目的,可进入下一个区块的执行验证及状态更新过程。步骤s0501:通过对区块链系统每秒处理的交易数的计算,对本发明的方案的效果进行评价和验证。本发明的方案rdmc面向联盟链系统且采用先排序再并发执行验证的交易处理方式,本发明在评估系统的整体性能时主要与seria及btec这两种现有的交易处理方式进行对比。实验中模拟多个客户端给排序节点发送交易请求,且交易大小设置为固定值。从整体性能上对rdmc、rdmc-a、btec以及serial四种方案进行对比。本发明采用区块链系统每秒处理的交易数作为方案的评价指标,计算公式如公式(5)所示:其中num(tx)为处理的有效的交易数量,time为处理交易所花费的时间。对比实验的实验效果如图2所示,横坐标为区块大小,纵坐标为系统吞吐量。本发明中使用部署在不同应用程序上的两个简单的token合约:smartcontracta和smartcontractb,来模拟客户端对部署在不同执行节点上的应用程序的交易请求。两个合约中都可以进行转账及余额查询等基本功能,区别在于smartcontrata中可以一次进行多笔转账而smartcontractb一次只可以进行一次转账。实验中采用不同的交易对相同账户的转账操作代表交易之间的冲突关系,则区块中交易的冲突率为冲突交易占区块中所有交易的比例。在实验过程中,每次都会运行10次重复实验,然后求平均值作为最后的结果,尽可能的消除实验误差。除了冲突率为100%的情况下,rdmc的tps值均高于其它方案。在冲突率为100%的情况下,rdmc和rdmc-a的吞吐量会低于serial的吞吐量,这是因为在冲突率为100%的时候,rdmc与rdmc-a中的交易同serial中一样是串行执行的,但是在rdmc与rdmc-a中为保证并行结果的正确性引入的依赖图及多版本并发控制技术带来了一定的时间消耗。实验结果证明本文提出的性能优化方案rdmc在不同程度的冲突环境下都可维持良好的性能。图2比较四个不同方案在不同冲突率下系统每秒处理的交易数得知,基于环形拓扑、依赖图和多版本控制的交易并发方案对于联盟链系统效果最好。尽管为说明目的公开了本发明的实施例和附图,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换、变化和修改都是可能的,因此,本发明的范围不局限于实施例和附图所公开的内容。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1