块链式账本中全局状态的哈希的生成方法、装置及设备制造方法及图纸

技术编号:24995808 阅读:28 留言:0更新日期:2020-07-24 17:58
公开了块链式账本中全局状态的哈希的生成方法、装置及设备。在更新块链式账本中的全局状态树时,对新写入账本的交易实行批量计算,得到对应于该批次交易的临时默克尔树,然后拼接临时默克尔树和当前的全局状态树,并更新计算所述全局状态树的根哈希。

【技术实现步骤摘要】
块链式账本中全局状态的哈希的生成方法、装置及设备
本说明书实施例涉及信息
,尤其涉及块链式账本中全局状态的哈希的生成方法、装置及设备。
技术介绍
在块链式账本中,通常都会存在一颗记录全局状态的全局状态树。当前对于全局状态的更新方式中每新产生一个交易就会计算一次全局状态所对应的哈希值。在交易频率较高的场景下,对系统的计算负担太大。
技术实现思路
本申请实施例的目的是提供一种在块链式账本中计算全局状态的哈希时可以降低系统负载的方案。为解决上述技术问题,本申请实施例是这样实现的:块链式账本中全局状态的哈希的生成方法,应用于以块链式账本存储数据记录的中心化的数据库服务端中,包括:获取已经确定需要写入账本的多个新交易,其中,所述多个新交易的哈希还没有写入全局状态树;根据所述多个新交易的哈希生成对应所述多个新交易的临时默克尔树;合并所述临时默克尔树和当前的全局状态树,生成以所述多个新交易的哈希为叶子节点的新的全局状态树;获取所述新的全局状态树的根哈希,将所述新的全局状态树的根哈希写入所述账本中的数据块的块头中。对应的,本说明书实施例还提供块链式账本中全局状态的哈希的生成装置,应用于以块链式账本存储数据记录的中心化的数据库服务端中,包括:获取模块,获取已经确定需要写入账本的多个新交易,其中,所述多个新交易的哈希还没有写入全局状态树;生成模块,根据所述多个新交易的哈希生成对应所述多个新交易的临时默克尔树;合并模块,合并所述临时默克尔树和当前的全局状态树,生成以所述多个新交易的哈希为叶子节点的新的全局状态树;写入模块,获取所述新的全局状态树的根哈希,将所述新的全局状态树的根哈希写入所述账本中的数据块的块头中。通过本说明书实施例中所提供的方案,在更新块链式账本中的全局状态树时,对新写入账本的交易实行批量计算,得到对应于该批次交易的临时默克尔树,然后拼接临时默克尔树和当前的全局状态树,并更新计算所述全局状态树的根哈希,从而降低了全局状态的更新频率,降低了系统的计算负载。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。附图说明为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。图1为本当前技术中更新全局状态树的示意图;图2是本说明书实施例提供的一种块链式账本中全局状态的哈希的生成方法的流程示意图;图3为本说明书实施例所提供的一种多线程方式生成临时默克尔树的示意图;图4为本说明书实施例所提供的一种临时默克尔树和当前的全局状态树进行拼接的示意图;图5为本说明书实施例所提供的一种块链式账本中生成数据块的流程示意图;图6为本说明书实施例所提供的一种数据块的块头的示意图;图7是本说明书实施例提供的一种块链式账本中全局状态的哈希的生成装置的结构示意图;图8是用于配置本说明书实施例方法的一种设备的结构示意图。具体实施方式为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。在块链式的账本交易记录的集合,由相连的区块构成,每个区块中包含一些有序交易。全局状态可以被视作为随着交易的执行而持续更新的状态,账本中所有的交易信息都体现在全局状态之中,并由全局状态树保存。具体而言,可以通过全局状态树的根哈希来表征当前的全局状态,全局状态中包含了账本中所有的交易信息。账本最初创建时,全局状态为空。全局状态树中的叶子结点与账本中的交易是一一对应的。通常的,叶子节点从左到右的排序方式与业务节点所对应的交易在账本中的顺序一致。在当前的块链式账本中,对于全局状态树的更新方式是每在账本中新写入一个交易,即需要更新一次全局状态树(即在全局状态树中的右边新加入了一个叶子节点),那么就需要重新计算一次全局状态树的根哈希。如图1所示,图1为本当前技术中更新全局状态树的示意图,图中的虚线节点表征了该节点需要重新计算哈希值。可以看到,每一个新交易都会对全局状态中的若干节点的哈希值造成改变,如果每来一个新交易就重新计算一次全局状态树的哈希值,显然系统的计算负载是很高的。在中心化的数据库服务端中,由于交易频次大为提高,这种全局状态树的更新方式就给服务端带来了很大的计算压力。基于此,本说明书实施例提供一种在块链式账本中计算全局状态的哈希时可以降低系统负载的方案。以下结合附图,详细说明本说明书各实施例提供的技术方案。如图2所示,图2是本说明书实施例提供的一种块链式账本中全局状态的哈希的生成方法的流程示意图,该流程具体包括如下步骤:S201,获取已经确定需要写入账本的多个新交易。其中,所述多个新交易的哈希还没有写入全局状态树。本说明书中所涉及的交易是指用户向区块链发布的一笔具有业务意图的数据记录;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。本说明书实施例中的新交易,是指已经被确定需要写入账本,但是还在等待出块条件到达,而并未写入账本的交易。具体的写入方式将在后文详述,换言之,新交易的信息还在等待写入当前的全局状态树中。新交易具体数量通常而言是预先指定数量的。例如,服务端预先指定每1000个新交易作为一个批次。在实际应用中,预先指定数量可以根据账本中交易的写入频率自行设定。进一步地,在一种实施方式中,可以根据全局状态树的分叉情形来设定数量。如果全局状态树是M叉树,那么在预先指定数量时可以指定新交易的数量为诸如M^n的形式。例如,全局状态树是2叉树,则可以指定新交易的数量为2^9,即512个。如果全局状态树是3叉树。则可以指定新交易的数量为诸如3^6,即729个。通过指定数量于全局状态树的分叉情形相适应,可以便于以后生成的临时默克尔树是一颗满树,便于临时默克尔树和当前的全局状态树的拼接。S203,根据所述多个新交易的哈希生成对应所述多个新交易的临时默克尔树。具体而言,在生成临时默克尔树之前,可以对于多个新交易进行随机的排序,并将随机排序后的新交易作为叶子节点来生成临时默克尔树。由于交易的顺序也是账本中的一部分信息,在由同样本文档来自技高网...

【技术保护点】
1.块链式账本中全局状态的哈希的生成方法,应用于以块链式账本存储数据记录的中心化的数据库服务端中,包括:/n获取已经确定需要写入账本的多个新交易,其中,所述多个新交易的哈希还没有写入全局状态树;/n根据所述多个新交易的哈希生成对应所述多个新交易的临时默克尔树;/n合并所述临时默克尔树和当前的全局状态树,生成以所述多个新交易的哈希为叶子节点的新的全局状态树;/n获取所述新的全局状态树的根哈希,将所述新的全局状态树的根哈希写入所述账本中的数据块的块头中。/n

【技术特征摘要】
1.块链式账本中全局状态的哈希的生成方法,应用于以块链式账本存储数据记录的中心化的数据库服务端中,包括:
获取已经确定需要写入账本的多个新交易,其中,所述多个新交易的哈希还没有写入全局状态树;
根据所述多个新交易的哈希生成对应所述多个新交易的临时默克尔树;
合并所述临时默克尔树和当前的全局状态树,生成以所述多个新交易的哈希为叶子节点的新的全局状态树;
获取所述新的全局状态树的根哈希,将所述新的全局状态树的根哈希写入所述账本中的数据块的块头中。


2.如权利要求1所述的方法,根据所述多个新交易的哈希生成对应所述多个新交易的临时默克尔树,包括:
确定每个新交易在账本中的排序信息,所述排序信息包括写入时间或者位置信息;
根据所述排序信息的先后对所述多个新交易排序,根据排序后的所述多个新交易的哈希生成临时默克尔树。


3.如权利要求1所述的方法,根据所述多个新交易的哈希生成对应所述多个新交易的临时默克尔树,包括:
对所述多个新交易进行排序,将排序后的所述多个新交易划分为K个有序的集合;
针对第i集合,创建与该集合对应的第i个线程,根据第i集合中所包含的新交易的顺
序,生成以第i集合中所包含的新交易为叶子节点的第i个子树,;
依序拼接生成得到的K个子树,生成以所述多个新交易为叶子节点的临时默克尔树。


4.如权利要求1所述的方法,合并所述临时默克尔树和当前的全局状态树,生成以所述多个新交易的哈希为叶子节点的新的全局状态树,包括:
确定所述临时默克尔树的根节点的高度;
保持所述临时默克尔树的根节点的高度不变,拼接所述临时默克尔树至当前的全局状态树中最晚的叶子节点的右侧,生成以所述多个新交易的哈希为叶子节点的新的全局状态树。


5.如权利要求1所述的方法,将所述新的全局状态树的根哈希写入所述账本中的数据块的块头中,包括:
生成包含所述多个新交易的新数据块,将所述新的全局状态树的根哈希写入所述新数据块的块头中。


6.如权利要求1所述的方法,所述方法还包括:删除所述临时默克尔树。


7.如权利要求1所述的方法,在所述块链式账本中,数据块通过如下方式生成:
接收待存储的数据记录,确定各数据记录的哈希值;
当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希...

【专利技术属性】
技术研发人员:张渊李亿泽杨新颖俞本权闫文远
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1