一种用于更新区块链全局数据状态的方法及其装置与流程

文档序号:16999564发布日期:2019-03-02 01:39阅读:227来源:国知局
一种用于更新区块链全局数据状态的方法及其装置与流程

本发明涉及区块链领域,特别是一种用于更新区块链全局数据状态的方法及其装置。



背景技术:

区块链一般可理解为分布式账本,从实质上说就是一个可以在多个站点、不同地理位置或者多个机构组成的网络里进行分享的数据库。在一个网络里的参与者可以获得一个唯一、真实账本的副本。区块链也可理解成是一种去中心化的分布式的状态机。状态机是记录状态的一个机器,通过一些分布式一致性的算法,我们可以保证在没有一个中心的情况下,大家点对点的来对状态进行切换,并且能够统一的一致性切换到一个新的状态里面去,这些切换的依据就是发生了一些大家都认可的交易。

对于区块链,当前区块包含上一个区块的hash,由此产生一个链式关系,保证整个事务的连续性和可追溯性。对于交易根,在区块内,用以标记当前区块内,所有交易树的根节点hash值。对于区块链和交易根这两个属性,在实际上由于节点版本以及升级时间先后等等问题,本地的数据状态不一定是正确的,因此引入了状态根。对于状态根,在以往的更新计算时,往往是通过本地所有数据的keyvalue(键值),来构造梅克尔树或者帕特里夏树,进而获得全局数据的状态根,用作后续检测本地数据状态的正确性。因此,在以往的状态根解决方案中,每一个数据变化都要重新通过本地所有数据的keyvalue(键值)来计算出一个新全局的数据状态,往往需要经过大量的计算才能得到一个全网状态根,因此大大增加了cpu的计算量,大大影响力区块链的处理能力,约束了区块链在性能上的发展及提高了对系统的硬件要求,导致无法满足到越来越大的应用场景需求。



技术实现要素:

为解决上述问题,本发明的目的在于提供一种用于更新区块链全局数据状态的方法及其装置,能够大大减少cpu的计算量,降低cpu的损耗,大大提升了区块链的性能和处理能力。

本发明解决其问题所采用的技术方案是:

一种用于更新区块链全局数据状态的方法,包括以下步骤:

同步数据到本地的当前区块;

计算出本地的当前区块的数据状态变化所对应产生的键值对集合;

根据键值对集合获得本地的当前区块的当前增量特征码;

提取出本地的上一个区块数据状态变化后所存储的历史增量特征码;

将当前增量特征码和历史增量特征码进行集合,并进行hash运算,从而生成并存储用于本地的下一个区块同步时所需要的新的历史增量特征码。

进一步地,所述根据键值对集合获得本地的当前区块的当前增量特征码表现为:对所述键值对集合中的所有键值进行hash运算,从而获得本地的当前区块增量数据更新所对应的当前增量特征码。

进一步地,还包括:对所述键值对集合中的所有键值按照ascii的编码方式进行统一排序;

或者,

对所述键值对集合中的所有键值按照区块内的交易执行顺序进行统一排序。

进一步地,所述根据键值对集合获得本地的当前区块的当前增量特征码表现为:将所述键值对集合中的所有键值对构造成树形数据结构,从而获得当前区块增量数据更新所对应的增量分树根,作为当前增量特征码。

进一步地,所述树形数据结构为梅克尔树结构或者帕特里夏树结构。

进一步地,还包括:判断本地的当前区块内记录的区块执行前的全局数据状态和本地的全局数据状态是否一致,所述本地的全局数据状态为本地的上一个区块数据状态变化后所存储的历史增量特征码,当一致时则认为全局数据状态一致,并执行所述计算出本地的当前区块的数据状态变化所对应产生的键值对集合,否则认为全局数据状态不一致,则拒绝同步当前区块。

进一步地,还包括:

构建新区块;

获取新区块执行前的本地的全局数据状态,即相对于新区块的本地的上一个区块数据状态变化所存储的历史增量特征码;

将新区块执行前的本地的全局数据状态记录在新区块内;

将新区块执行前的本地的全局数据状态作为共识消息分发出去,用于同步区块时和同步区块执行前的本地的全局数据状态作对比。

进一步地,还包括:

当前的共识区块接收到共识消息;

生成新的共识区块,并将共识消息记录到新的共识区块内;

获取新的共识区块在执行前的本地的全局数据状态;

判断新的共识区块在执行前的本地的全局数据状态和新的共识区块内记录的共识消息是否一致,当一致时则签名并广播共识消息,否则返回继续等待共识消息。

一种用于更新区块链全局数据状态的装置,其特征在于,包括:

当前区块同步装置,用于同步数据到本地的当前区块;

键值对集合计算装置,用于计算出本地的当前区块的数据状态变化所对应产生的键值对集合;

当前增量特征码获取装置,用于根据键值对集合获得本地的当前区块的当前增量特征码;

历史增量特征码提取装置,用于提取出本地的上一个区块数据状态变化后所存储的历史增量特征码;

新的历史增量特征码生成及存储装置,用于将当前增量特征码和历史增量特征码进行集合,并进行hash运算,从而生成并存储用于本地的下一个区块同步时所需要的新的历史增量特征码。

进一步地,还包括:

全局数据状态一致性判断装置,用于判断本地的当前区块内记录的区块执行前的全局数据状态和本地的全局数据状态是否一致,所述本地的全局数据状态为本地的上一个区块数据状态变化后所存储的历史增量特征码,当一致时则认为全局数据状态一致,并执行所述键值对集合计算装置,否则认为全局数据状态不一致,则拒绝同步当前区块。

进一步地,还包括:

新区块构建装置,用于构建新区块;

新区块执行前的本地的全局数据状态获取装置,用于获取新区块执行前的本地的全局数据状态,即相对于新区块的本地的上一个区块数据状态变化所存储的历史增量特征码;

新区块执行前的本地的全局数据状态记录装置,用于将新区块执行前的本地的全局数据状态记录在新区块内;

共识消息分发装置,用于将新区块执行前的本地的全局数据状态作为共识消息分发出去,用于同步区块时和同步区块执行前的本地的全局数据状态作对比。

进一步地,还包括:

共识消息接收装置,用于当前的共识区块接收共识消息;

新的共识区块生成装置,用于生成新的共识区块,并将共识消息记录到新的共识区块内;

新的共识区块在执行前的本地的全局数据状态获取装置,用于获取新的共识区块在执行前的本地的全局数据状态;

共识消息判断装置,用于判断新的共识区块在执行前的本地的全局数据状态和新的共识区块内记录的共识消息是否一致,当一致时则签名并广播共识消息,否则返回继续等待共识消息。

一种用于更新区块链全局数据状态的设备,包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的用于更新区块链全局数据状态的方法。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述的用于更新区块链全局数据状态的方法。

本发明的有益效果是:本发明采用的一种用于更新区块链全局数据状态的方法及其装置,包括了当前区块同步装置、键值对集合计算装置、当前增量特征码获取装置、历史增量特征码提取装置和新的历史增量特征码生成及存储装置。本发明通过当前区块的数据状态变化时产生的键值对集合,从而获得当前区块的当前增量特征码,并将所述的当前增量特征码和上一个区块数据状态变化后所存储的历史增量特征码进行集合,通过hash运算后生成并存储用于下一个区块同步时所需要的新的历史增量特征码。本发明在状态根的解决方案中,只需要将当前区块数据变化的增量部分所对应的当前增量特征码和上一个区块数据状态变化后已存储的历史增量特征码进行集合,得出用于下一个区块同步时所需要的新的历史增量特征码,本发明在每次运算时只需要将当前增量特征码和已存储的历史增量特征码这两个特征码进行集合后hash运算即可得出全局数据的状态,区别于以往需要重新通过本地所有数据的键值来逐级计算出一个全局的数据状态,从而大大减少cpu的计算量,降低cpu的损耗,大大提升了区块链的性能和处理能力,从而能够满足到越来越大的应用场景需求。

附图说明

下面结合附图和实例对本发明作进一步说明。

图1是本发明一种用于更新区块链全局数据状态的方法及其装置关于同步区块的简要流程图;

图2是本发明一种用于更新区块链全局数据状态的方法及其装置关于同步区块的具体流程图;

图3是本发明一种用于更新区块链全局数据状态的方法及其装置关于同步区块时新的历史增量特征码生成过程的示意图;

图4是本发明一种用于更新区块链全局数据状态的方法及其装置关于同步区块时树形数据结构中新的历史增量特征码生成过程的示意图;

图5是本发明一种用于更新区块链全局数据状态的方法及其装置关于构建新区块的流程图;

图6是本发明一种用于更新区块链全局数据状态的方法及其装置关于验证共识消息的流程图;

图7是本发明一种用于更新区块链全局数据状态的方法及其装置的结构示意图。

具体实施方式

参照图1,一种用于更新区块链全局数据状态的方法,包括以下步骤:

s1:同步数据到本地的当前区块;

s3:计算出本地的当前区块的数据状态变化所对应产生的键值对集合;

s4:根据键值对集合获得本地的当前区块的当前增量特征码;

s5:提取出本地的上一个区块数据状态变化后所存储的历史增量特征码;

s6:将当前增量特征码和历史增量特征码进行集合,并进行hash运算,从而生成并存储用于本地的下一个区块同步时所需要的新的历史增量特征码。

本发明采用的一种用于更新区块链全局数据状态的方法及其装置,通过当前区块的数据状态变化时产生的键值对集合,从而获得当前区块的当前增量特征码,并将所述的当前增量特征码和上一个区块数据状态变化后所存储的历史增量特征码进行集合,通过hash运算后生成并存储用于下一个区块同步时所需要的新的历史增量特征码。所述hash运算就是把任意长度的输入(又叫做预映射)通过散列算法变换成固定长度的输出,该输出就是散列值;这种变换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值;简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。本发明在状态根的解决方案中,只需要将当前区块数据变化的增量部分所对应的当前增量特征码和上一个区块数据状态变化后已存储的历史增量特征码进行集合,得出用于下一个区块同步时所需要的新的历史增量特征码,本发明在每次运算时只需要将当前增量特征码和已存储的历史增量特征码这两个特征码进行集合后hash运算即可得出全局数据的状态,区别于以往需要重新通过本地所有数据的键值来逐级计算出一个全局的数据状态,从而大大减少cpu的计算量,降低cpu的损耗,大大提升了区块链的性能和处理能力,从而能够满足到越来越大的应用场景需求。

参照图3,链式区块中不断同步时关于新的历史增量特征码生成过程的示意图,其中,假设block3为当前区块,block2为上一个区块,block4为下一个区块,若当前区块block3中的数据状态发生变化,即出现数据增添、删除或者更新等情况时,会相应改变键值对集合中的键值,从而根据所发生变化的键值对集合进行运算得出当前区块的当前增量特征码,即δhash3,同时由于在上一个区块发生数据状态变化后会存储好一个历史增量特征码globalstate2,因此,在当前区块block3中的数据状态发生变化后,除了当前增量数据所影响产生的当前增量特征码δhash3外,还会同步集合上一个区块block2所存储好的历史增量特征码globalstate2,进一步对两者特征码(当前增量特征码δhash3和历史增量特征码globalstate2)进行hash运算,最后得出当前区块block3在数据状态变化后用于下一个区块block4同步时所需要的新的历史增量特征码globalstate3。如此类推,可知额外的block2、block4和block5区块在数据状态发生变化时都会将当初增量对应的当前增量特征码和已存储好上一级的历史增量特征码进行hash运算,得出下一个区块同步时所需要的最新的历史增量特征码,对应依次为globalstate2、globalstate4和globalstate5,分别对应于区块block3、block5和block6同步的前提基础。

在图3中关于状态根的解决方案中,在每次运算时只需要将当前增量特征码和已存储的历史增量特征码这两个特征码进行集合后hash运算即可得出全局数据的状态,区别于以往需要重新通过本地所有数据的键值来逐级计算出一个全局的数据状态,从而大大减少cpu的计算量,降低cpu的损耗,大大提升了区块链的性能和处理能力,从而能够满足到越来越大的应用场景需求。在后续对全局状态数据一致性进行检查的时候,只检查上一个区块的增量数据,如果增量数据一致则认为全局状态一致,使得全局状态的计算跟状态数据的总量无关,能够提高状态计算效率及减少cpu内存损耗。

参照图1-图2,进一步地,所述步骤s4“根据键值对集合获得本地的当前区块的当前增量特征码”具有两种实施方式,第一种实施方式具体为步骤s4-1:对所述键值对集合中的所有键值进行hash运算,从而获得本地的当前区块增量数据更新所对应的当前增量特征码。由于在当前区块数据发生变化时,会相应影响多个键值对的数值,本发明通过将增量变化所影响的键值对进行集合,并进行hash运算,得出当前区块增量数据更新所对应的当前增量特征码。

进一步地,在步骤s4-1中“对所述键值对集合中的所有键值进行hash运算”之前还包括以下步骤:对所述键值对集合中的所有键值按照ascii的编码方式进行统一排序。

进一步地,在步骤s4-1中“对所述键值对集合中的所有键值进行hash运算”之前还包括以下步骤:对所述键值对集合中的所有键值按照区块内的交易执行顺序进行统一排序。

参照图1、2和图4,进一步地,所述步骤s4“根据键值对集合获得本地的当前区块的当前增量特征码”第二种实施方式具体为步骤s4-2:将所述键值对集合中的所有键值对构造成树形数据结构,从而获得当前区块增量数据更新所对应的增量分树根,作为当前增量特征码。如图4,假设blockx为初始区块,当blockx中的数据状态发生变化时,会相应影响部分键值对的数值,如keya中的value1-1和value1-2以及keyb中的value2-1和value2-2,本发明的第二种实施方式中,将keya中的value1-1和value1-2以及keyb中的value2-1和value2-2,来构造成树形数据结构,从树形数据结构中的底端的四个根值value1-1、value1-2、value2-1和value2-2逐一往上进行hash运算,从而将增量变化所对应的键值对集合往上压缩成增量分树根,即blockxroot,同时进行存储,用于下一个区块blockx+1同步的前提基础;若区块blockx+1的数据状态发生变化时,会相应影响部分键值对的数值,如keyc中的value3-1和value3-2以及keyd中的value4-1和value4-2,同时还会直接提取出已存储好的上一个增量分树根blockxroot,将keyc中的value3-1和value3-2以及keyd中的value4-1和value4-2和上一个增量分树根blockxroot共同构造成另一个新的树形数据结构,同理对新的树形数据结构逐一往上进行hash运算,从而将增量变化所对应的键值对集合和上一个增量分树根blockxroot共同压缩成一个新的增量分树根,即blockx+1root,同时进行存储,用于下一个区块blockx+2同步的前提基础;同理,如此类推出当下一个区块blockx+2的数据变化后所生成的blockx+2root。对于传统的帕特里夏树,只能证明在某一个区块下的数据状态存在或者不存在,但是增量分树根除了这一点以外,还能证明,值在某一个区块发生了变化,并且能标明是新增、删除或者更新操作,能证明变化后的值。

进一步地,所述步骤中的树形数据结构为梅克尔树结构或者帕特里夏树结构。

参照图2,进一步地,在所述步骤“同步到本地的当前区块”后还包括以下步骤:

s2:判断本地的当前区块内记录的区块执行前的全局数据状态和本地的全局数据状态是否一致,所述本地的全局数据状态为本地的上一个区块数据状态变化后所存储的历史增量特征码,当一致时则执行步骤s2-1,否则执行步骤s2-2;如图3中,当需要同步当前区块block3时,需要提取出当前区块block3所在的本地的全局数据状态,即globalstate2,和当前区块block3内记录的区块执行前的全球共识后的全局数据状态进行对比,从而实现对全局状态数据一致性进行检查。

s2-1:全局数据状态一致,并执行所述步骤s3“计算出本地的当前区块的数据状态变化所对应产生的键值对集合”;当增量数据一致则认为当前区块block3的数据状态和全局状态保持一致,使得全局状态的计算跟状态数据的总量无关,能够提高状态计算效率及减少cpu内存损耗。

s2-2:全局数据状态不一致,则拒绝同步当前区块。当增量数据不一致则认为当前区块block3的数据状态和全局状态不一致。

参照图5,进一步地,还包括以下步骤:

b1:构建新区块;

b2:获取新区块执行前的本地的全局数据状态,即相对于新区块的本地的上一个区块数据状态变化所存储的历史增量特征码;

b3:将新区块执行前的本地的全局数据状态记录在新区块内;

b4:将新区块执行前的本地的全局数据状态作为共识消息分发出去,用于同步区块时和同步区块执行前的本地的全局数据状态作对比。

通过上述步骤能够生成用于在同步区块时和同步区块执行前的本地的全局数据状态作对比的共识消息,即全球的全局数据特征码。

参照图6,进一步地,在所述步骤b4中“将新区块执行前的本地的全局数据状态作为共识消息分发出去”后还包括以下步骤:

p1:当前的共识区块接收到共识消息;

p2:生成新的共识区块,并将共识消息记录到新的共识区块内;

p3:获取新的共识区块在执行前的本地的全局数据状态;

p4:判断新的共识区块在执行前的本地的全局数据状态和新的共识区块内记录的共识消息是否一致,当一致时则执行步骤p5,否则返回执行步骤p1;

p5:签名并广播共识消息。

通过上述步骤能够对提出的共识消息进行验证。

一种用于更新区块链全局数据状态的装置,包括以下装置:

当前区块同步装置,用于同步数据到本地的当前区块;

键值对集合计算装置,用于计算出本地的当前区块的数据状态变化所对应产生的键值对集合;

当前增量特征码获取装置,用于根据键值对集合获得本地的当前区块的当前增量特征码;

历史增量特征码提取装置,用于提取出本地的上一个区块数据状态变化后所存储的历史增量特征码;

新的历史增量特征码生成及存储装置,用于将当前增量特征码和历史增量特征码进行集合,并进行hash运算,从而生成并存储用于本地的下一个区块同步时所需要的新的历史增量特征码。

进一步地,还包括:

全局数据状态一致性判断装置,用于判断本地的当前区块内记录的区块执行前的全局数据状态和本地的全局数据状态是否一致,所述本地的全局数据状态为本地的上一个区块数据状态变化后所存储的历史增量特征码,当一致时则认为全局数据状态一致,并执行所述键值对集合计算装置,否则认为全局数据状态不一致,则拒绝同步当前区块。

进一步地,还包括:

新区块构建装置,用于构建新区块;

新区块执行前的本地的全局数据状态获取装置,用于获取新区块执行前的本地的全局数据状态,即相对于新区块的本地的上一个区块数据状态变化所存储的历史增量特征码;

新区块执行前的本地的全局数据状态记录装置,用于将新区块执行前的本地的全局数据状态记录在新区块内;

共识消息分发装置,用于将新区块执行前的本地的全局数据状态作为共识消息分发出去,用于同步区块时和同步区块执行前的本地的全局数据状态作对比。

进一步地,还包括:

共识消息接收装置,用于当前的共识区块接收共识消息;

新的共识区块生成装置,用于生成新的共识区块,并将共识消息记录到新的共识区块内;

新的共识区块在执行前的本地的全局数据状态获取装置,用于获取新的共识区块在执行前的本地的全局数据状态;

共识消息判断装置,用于判断新的共识区块在执行前的本地的全局数据状态和新的共识区块内记录的共识消息是否一致,当一致时则签名并广播共识消息,否则返回继续等待共识消息。

一种用于更新区块链全局数据状态的设备,包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的用于更新区块链全局数据状态的方法。

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上述的用于更新区块链全局数据状态的方法。

存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态性计算机可执行程序以及模块,如本发明实施例中的用于更新区块链全局数据状态的方法对应的程序指令/装置。处理器通过运行存储在存储器中的非暂态软件程序、指令以及装置,从而执行立体成像处理装置的各种功能应用以及数据处理,即实现上述的用于更新区块链全局数据状态的方法。

存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据立体成像处理装置的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该立体投影装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述一个或者多个模块存储在所述存储器中,当被所述一个或者多个处理器执行时,执行上述任意方法实施例中的用于更新区块链全局数据状态的方法,例如,执行以上描述的图1和图2中的方法步骤s1至s6,图5中的方法步骤b1至b4,图6中的方法步骤p1至p5。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如,被图7中的一个处理器执行,可使得上述一个或多个处理器执行上述任意方法实施例中的用于更新区块链全局数据状态的方法,例如,执行以上描述的图1和图2中的方法步骤s1至s6,图5中的方法步骤b1至b4,图6中的方法步骤p1至p5。

本实施例还提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行,例如,被图7中的一个处理器执行,使所述计算机执行如上述用于更新区块链全局数据状态的方法,例如,执行以上描述的图1和图2中的方法步骤s1至s6,图5中的方法步骤b1至b4,图6中的方法步骤p1至p5。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1