发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种面向区块链多通道的区块打包方法、装置及存储介质,使得各个通道能够根据通道自身的特点来选择合适的打包方法,节点能够动态调整打包时间与区块大小,解决了在不可信环境下数据隔离与保密无法同时实现的区块链打包问题,并有效提高了区块链的共识交易处理性能。
本发明的目的可以通过以下技术方案来实现:
一种面向区块链多通道的区块打包方法,该方法包括如下步骤:
S1、各个共识节点对达成共识的交易按通道进行分拣并存储,形成对应于各个共识节点的系统通道队列和应用通道队列,所述的系统通道队列存储系统通道交易,所述的应用通道队列存储共识节点参与的应用通道内的应用通道交易,共识节点参与的各个应用通道分别对应一个应用通道队列;
S2、对于系统通道队列,每当队列中存在系统通道交易,立刻打包生成区块;
S3、对于应用通道队列,根据对应的应用通道的交易频繁情况动态调整区块打包方法,基于确定的打包方法对应用通道交易打包生成区块。
优选地,步骤S1具体为:
S11、依次识别达成共识的交易,若为系统通道交易则存入系统通道队列中,若为应用通道交易则执行步骤S12;
S12、获取应用通道交易的通道标识字段,将交易所在的应用通道与共识节点自身参与的应用通道进行对比,若为共识节点自身参与的应用通道,则将该应用通道交易存入该共识节点相应的应用通道队列。
优选地,步骤S3具体为:
S31、根据应用通道的配置文件设置各个应用通道在当前通道配置下初始的区块打包方法;
S32、检测各个应用通道配置是否修改,若修改则进行步骤S31;
S33、对于各个应用通道队列,共识节点根据设置的区块打包方法完成此次区块的打包并记录区块参数,同时根据记录的区块参数确定应用通道的交易频繁情况,最后根据应用通道的交易频繁情况调整下一次区块打包方法;
S34、循环执行步骤S32~S33。
优选地,步骤S3中参与动态调整的打包方法包括时间间隔打包法和交易数量打包法;
所述的时间间隔打包法为:当区块打包时长达到设定时间间隔,则将应用通道队列中的所有交易打包生成区块,所述的区块打包时长为应用通道队列中第一个交易进入时间与当前时刻的时间间隔;
所述的交易数量打包法为:当进入应用通道队列中的交易数量达到设定交易数量,则将应用通道队列中的所有交易打包生成区块。
优选地,在采用时间间隔打包法进行打包过程中,若打包时长未达到设定时间间隔,但应用通道队列中的所有交易的大小超过最大区块大小,则立即将应用通道队列中的所有交易打包生成区块。
优选地,采用时间间隔打包法进行打包的具体步骤为:
a1、在应用通道队列收到第一个交易开始,启动计时器以及计数器;
a2、应用通道队列每接收一个交易就检查该应用通道队列中所有交易的大小,若超过最大区块大小,则执行步骤a3,否则执行步骤a4;
a3、立即将应用通道队列中的所有交易打包生成区块,同时停止计时器以及计数器,根据对应的应用通道的交易频繁情况动态调整区块打包方法;
a4、判断计时器是否达到设定时间间隔,若是则将应用通道队列中的所有交易打包生成区块,同时停止计时器以及计数器,根据对应的应用通道的交易频繁情况动态调整区块打包方法,否则返回步骤a2。
优选地,在采用交易数量打包法进行打包过程中,若进入应用通道队列中的交易数量未达到设定交易数量,但一旦应用通道队列中的所有交易的大小超过最大区块大小或打包时长超过设定的最大打包时长,则立即将应用通道队列中的所有交易打包生成区块。
优选地,采用交易数量打包法进行打包的具体步骤为:
b1、在应用通道队列收到第一个交易开始,启动计时器以及计数器;
b2、应用通道队列每接收一个交易就检查该应用通道队列中所有交易的大小,若超过最大区块大小,则执行步骤b4,否则执行步骤b3;
b3、判断计时器是否超过设定的最大打包时长,若是则执行步骤b4,否则执行步骤b5;
b4、立即将应用通道队列中的所有交易打包生成区块,同时停止计时器以及计数器,根据对应的应用通道的交易频繁情况动态调整区块打包方法;
b5、判断进入应用通道队列中的交易数量是否达到设定交易数量,若是则将应用通道队列中的所有交易打包生成区块,同时停止计时器以及计数器,根据对应的应用通道的交易频繁情况动态调整区块打包方法,否则返回步骤b2。
优选地,步骤S33完成区块打包后记录的区块参数包括区块交易数量以及区块打包时长。
优选地,步骤S33调整下一次区块打包方法的具体方式为:
若当前区块打包方法为时间间隔打包法,则判断已打包区块的区块交易数量是否大于设定交易数量,若是则下一个区块的区块打包方法调整为交易数量打包法,否则下一个区块的区块打包方法仍采用时间间隔打包法;
若当前区块打包方法为交易数量打包法,则判断已打包区块的区块打包时长是否大于设定时间间隔,若是则下一个区块的区块打包方法调整为时间间隔打包法,否则下一个区块的区块打包方法仍采用交易数量打包法。
一种用于区块打包装置,包括存储器和处理器,所述存储器,用于存储计算机程序,所述处理器用于当执行所述的计算机程序时实现上述的面向区块链多通道的区块打包方法。
一种用于区块打包存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的面向区块链多通道的区块打包方法。
与现有技术相比,本发明具有如下优点:
(1)本发明将系统通道交易和应用通道交易分开处理,保证了通道配置信息更新的及时性,对于多个应用通道的交易,共识节点只打包自身参与的通道的交易,实现了基于通道的数据隔离,针对通道交易的频繁情况可以根据通道的交易状况动态切换,使得系统的交易处理时间更加稳定;
(2)本发明设计了两种打包方法,分别是时间间隔打包法和交易数量打包法,通过这两种打包方法保证了区块打包结果的确定性,能够有效地提高区块链的交易处理速度,提高了区块链系统出块的效率。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。注意,以下的实施方式的说明只是实质上的例示,本发明并不意在对其适用物或其用途进行限定,且本发明并不限定于以下的实施方式。
实施例1
如图1所示,本实施例提供了一种面向区块链多通道的区块打包方法,该方法包括如下步骤:
S1、各个共识节点对达成共识的交易按通道进行分拣并存储,形成对应于各个共识节点的系统通道队列和应用通道队列,系统通道队列存储系统通道交易,应用通道队列存储共识节点参与的应用通道内的应用通道交易,共识节点参与的各个应用通道分别对应一个应用通道队列。
此步骤是共识节点完成对达成共识的交易的分拣,因为达成共识的交易中存在系统通道交易和应用通道交易,而对这两种交易的处理是不同的,因此每个共识节点维护多个交易队列,包括系统通道队列和应用通道队列,用来存储被分拣的交易,并为之后的打包做准备,其中应用通道队列包括多个,分别对应于共识节点参与的应用通道,进而步骤S1具体为:
S11、依次识别达成共识的交易,若为系统通道交易则存入系统通道队列中,若为应用通道交易则执行步骤S12;
S12、获取应用通道交易的通道标识字段,将交易所在的应用通道与共识节点自身参与的应用通道进行对比,若为共识节点自身参与的应用通道,则将该应用通道交易存入该共识节点相应的应用通道队列。
图2描述了本发明中对达成共识的交易进行分拣的一个示例,此次达成共识的交易中有系统通道Sys_Channel、应用通道Channel_1、Channel_2、Channel_3的交易,共识节点加入了通道Channel_1和Channel_3。在分拣的过程中,共识节点对每一个交易进行识别,对于应用通道Channel_2的交易,节点不会对其进行打包并将其舍弃,对于系统通道Sys_Channel以及应用通道Channel_1和Channel_3的交易,共识节点将其放入相应的通道队列Sys_queue、App_channel1以及App_channel3中,以便打包出块。注意,每当有交易存入队列,打包方法都会检测是否进行打包出块,为方便理解此处假设三个队列原为空且皆未满足打包要求。
S2、对于系统通道队列,每当队列中存在系统通道交易,立刻打包生成区块。此步骤是为了让通道配置信息尽快生效,因为通道可以使用配置区块来更新配置,在账本中每新添加一个配置区块,通道就按照最新配置区块的定义来修改配置。
S3、对于应用通道队列,根据对应的应用通道的交易频繁情况动态调整区块打包方法,基于确定的打包方法对应用通道交易打包生成区块。不同的通道呈现出不同的特点,一些通道交易较为频繁,一些通道交易较为稀少,一些通道交易呈现出不均匀的分布。因此需要综合考虑不同通道的特点,采取不同的打包方法。除此之外,通道的交易情况是变化的,那么交易的打包方法也要随着交易情况进行改变,打包完成后共识节点将生成的区块上链。
上述步骤S3具体为:
S31、根据应用通道的配置文件设置各个应用通道在当前通道配置下初始的区块打包方法;
S32、检测各个应用通道配置是否修改,若修改则进行步骤S31;
S33、对于各个应用通道队列,共识节点根据设置的区块打包方法完成此次区块的打包并记录区块参数,同时根据记录的区块参数确定应用通道的交易频繁情况,最后根据应用通道的交易频繁情况调整下一次区块打包方法;
S34、循环执行步骤S32~S33。
步骤S3中参与动态调整的打包方法包括时间间隔打包法和交易数量打包法;
时间间隔打包法为:当区块打包时长达到设定时间间隔t,则将应用通道队列中的所有交易打包生成区块,区块打包时长为应用通道队列中第一个交易进入时间与当前时刻的时间间隔;
交易数量打包法为:当进入应用通道队列中的交易数量达到设定交易数量x,则将应用通道队列中的所有交易打包生成区块。
在采用时间间隔打包法进行打包过程中,若打包时长未达到设定时间间隔t,但应用通道队列中的所有交易的大小超过最大区块大小mb,则立即将应用通道队列中的所有交易打包生成区块。
采用时间间隔打包法进行打包的具体步骤为:
a1、在应用通道队列收到第一个交易开始,启动计时器Timer以及计数器Counter,计时器Timer进行计时,计数器Counter对进入应用通道队列的交易进行计数,若是在队列中没有交易的时候就启动计时器Timer会出现打包空块的情况,而从收到第一个交易才启动能够保证块中至少有一个交易;
a2、应用通道队列每接收一个交易就检查该应用通道队列中所有交易的大小,若超过最大区块大小mb,则执行步骤a3,否则执行步骤a4;
a3、立即将应用通道队列中的所有交易打包生成区块,同时停止计时器Timer以及计数器Counter,根据对应的应用通道的交易频繁情况动态调整区块打包方法;
a4、判断计时器是否达到设定时间间隔t,若是则将应用通道队列中的所有交易打包生成区块,同时停止计时器Timer以及计数器Counter,根据对应的应用通道的交易频繁情况动态调整区块打包方法,否则返回步骤a2。
在采用交易数量打包法进行打包过程中,若进入应用通道队列中的交易数量未达到设定交易数量x,但一旦应用通道队列中的所有交易的大小超过最大区块大小mb或打包时长超过设定的最大打包时长mt,则立即将应用通道队列中的所有交易打包生成区块。
采用交易数量打包法进行打包的具体步骤为:
b1、在应用通道队列收到第一个交易开始,启动计时器Timer以及计数器Counter,计时器Timer进行计时,计数器Counter对进入应用通道队列的交易进行计数,若是在队列中没有交易的时候就启动计时器Timer会出现打包空块的情况,而从收到第一个交易才启动能够保证块中至少有一个交易;
b2、应用通道队列每接收一个交易就检查该应用通道队列中所有交易的大小,若超过最大区块大小mb,则执行步骤b4,否则执行步骤b3;
b3、判断计时器是否超过设定的最大打包时长mt,若是则执行步骤b4,否则执行步骤b5;
b4、立即将应用通道队列中的所有交易打包生成区块,同时停止计时器Timer以及计数器Counter,根据对应的应用通道的交易频繁情况动态调整区块打包方法;
b5、判断进入应用通道队列中的交易数量是否达到设定交易数量x,若是则将应用通道队列中的所有交易打包生成区块,同时停止计时器Timer以及计数器Counter,根据对应的应用通道的交易频繁情况动态调整区块打包方法,否则返回步骤b2。
步骤S33完成区块打包后记录的区块参数包括区块交易数量xi以及区块打包时长ti,例如通道队列App_queue1的ti=100ms,xi=150则说明通道队列App_queue1刚刚打包了一个包含150个交易的区块,耗时100ms。
步骤S33调整下一次区块打包方法的具体方式为:
若当前区块打包方法为时间间隔打包法,则判断已打包区块的区块交易数量xi是否大于设定交易数量x,若是则下一个区块的区块打包方法调整为交易数量打包法,否则下一个区块的区块打包方法仍采用时间间隔打包法;
若当前区块打包方法为交易数量打包法,则判断已打包区块的区块打包时长ti是否大于设定时间间隔t,若是则下一个区块的区块打包方法调整为时间间隔打包法,否则下一个区块的区块打包方法仍采用交易数量打包法。
图3描述了本发明中对完成分拣的应用通道交易的打包过程。图中显示的是应用通道Channel_3从通道创建开始的区块打包过程,此处未考虑最大打包时长mt以及最大区块大小mb,这两者的例子参考图4的(a)和(b)。首先根据通道配置文件设置初始的打包方法为时间间隔法打包法,确定如下参数:设定时间间隔t为100ms,设定交易数量x为20。在第一次打包出的区块中,有30个交易,xi=30,xi>x,这说明现在通道内的交易十分频繁,继续采用时间间隔打包会导致成块较大且区块产生速度慢,因此下一次的打包方法换为交易数量打包法。第二次打包区块的时间间隔ti<t,打包方法不变。第三次打包区块的区块打包时长ti为200ms,ti>t,这说明现在通道内的交易较为稀少,采用交易数量法会导致区块产生速度慢,因此换为时间间隔法进行打包。第四次产生的区块中xi<x,打包方法不变。第五次产生的区块中xi>x,应当改变打包方法,但是这个时候检测到通道配置被修改了,因此需要根据通道配置文件重置打包方法以及相关参数,根据重置的内容来进行下一次打包出块。
图4描述了本发明对分拣完的交易进行打包过程中,遇到与最大打包时长mt以及最大区块大小mb相关问题的处理流程。图4中的(a)和(b)皆以应用通道Channel_3为例,最大打包时长mt为150ms,最大区块大小mb为1M。如图4中(a)所述,下一次区块的生成方法为时间间隔打包法,但是在计时器Timer未到t时,队列中的交易(1)和(2)大小超过1M,因此立刻打包出块,下一次区块打包方法不变。对于区块大小超出限制,在交易数量法下的情况基本一致。图4的(b)中,下一次区块的生成方法为交易数量打包法,但是在收到第一个交易计时器启动后,队列中未再收到其他交易,直到计时器Timer超过最大时间限制,立刻打包出块。此次区块打包时长ti大于参数t,因此下一次区块打包方法改为时间间隔法打包法。若在采用交易数量打包法进行打包过程中,区块打包时长ti未到达参数t时,队列中的交易大小超过最大区块大小,也立刻将队列中的交易打包出块。对于区块打包时长超出最大打包时长这种情况,时间间隔打包法不会产生此问题。
图5描述了本发明所使用的区块链多通道环境。在多通道的情况下,网络中的每一个节点都会维护系统通道的区块链,因为所有的节点都在系统通道Sys_Channel内,因此所有的节点都会打包系统通道的交易。除此之外,每一个节点都会维护其自身所在通道的区块链,图中有三个应用通道Channel_1、Channel_2、Channel_3,其中在通道Channel_1中的节点只打包属于Channel_1的交易,通道Channel_2中的节点只打包属于Channel_2的交易,通道Channel_3中的节点只打包属于Channel_3的交易。节点a同时属于通道Channel_1和Channel_2,所以对于对这两个应用通道的交易,节点a都会进行打包。
图6描述了本发明中交易在共识节点中进行确定性打包的过程。在区块链多通道的环境下,为了保证各个通道交易的隐私性,交易数据采用每个通道特有的加密方式进行加密,加密方式只有通道内的节点知道。交易首先要达成共识,然后由共识节点采用确定性打包方法对交易进行打包出块。若交易所在通道是共识节点参与的通道,那么共识节点会在本地打包交易时,对交易数据进行解密。
图7描述了本发明的确定性打包方法在多通道的区块链网络中的流程。可以看到,对于已经达成共识的交易,网络内的所有节点都会打包其中的系统通道交易,这能确保对系统通道交易的快速处理以及对配置信息达成一致。而对于应用通道,每个节点只打包自身参与的通道内的交易。如图中节点a只参与了应用通道Channel_1,它除了系统通道交易外只打包了Channel_1的交易。而节点b参与了应用通道Channel_1和Channel_2,它打包了应用通道Channel_1和Channel_2的交易。这说明一个通道的交易只能被该通道内的节点所获取,保证了交易的隐私性。从图中也可以看出,采用确定性打包方法,对于同一个通道,打包得到的区块是一致的。
本发明针对区块链多通道场景下打包方法的缺失而设计的一种面向区块链多通道的确定性打包方法,采用共识交易分拣和动态切换打包方法构成区块链多通道确定性打包的两个阶段,使得共识节点可以高效地完成对交易的区分和存储并且确保数据保密性。在综合考虑不同通道特点的情况下采用动态的打包方法,使得共识节点能够及时地打包出大小合适的区块。这在补足了区块链多通道场景下打包方法缺失之外,还优化了区块链的出块效率,尤其是采用动态地调整打包方法来生成区块,能够有效地提高区块链的交易处理速度,这大大提升了整个区块链系统的性能。
实施例2
本实施例提供一种用于区块打包装置,包括存储器和处理器,所述存储器,用于存储计算机程序,所述处理器用于当执行计算机程序时实现如实施例1中所述的面向区块链多通道的区块打包方法,
实施例3
本实施例提供一种用于区块打包存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如实施例1中所述的面向区块链多通道的区块打包方法。
上述实施方式仅为例举,不表示对本发明范围的限定。这些实施方式还能以其它各种方式来实施,且能在不脱离本发明技术思想的范围内作各种省略、置换、变更。