一种区块链中的MPT树的更新方法、装置和电子设备转让专利

申请号 : CN202010630036.3

文献号 : CN111522833B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孙赫

申请人 : 支付宝(杭州)信息技术有限公司

摘要 :

本说明书公开了一种区块链中的MPT树的更新方法、装置和电子设备,所述方法应用于区块链中的共识节点,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂,所述方法包括:获取区块链的MPT树中的新增用户数据;将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希。

权利要求 :

1.一种区块链中的MPT树的更新方法,所述方法应用于区块链中的共识节点,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂,所述方法包括:获取区块链的MPT树中的新增用户数据;

将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;

以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;

基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;

至少一个分组二叉树中叶子节点最多的分组二叉树的叶子节点数量为所述MPT树的叶子数量以2为底数取对数值后向下取整。

2.如权利要求1所述的方法,基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希,包括:从所述更新后的MPT树中,获取所述新增用户数据的哈希值;

若所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为偶数,则基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树对应的根哈希,更新所述MPT树中涉及变更的根哈希。

3.如权利要求2所述的方法,基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树对应的根哈希,更新MPT树中涉及变更的根哈希,包括:基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树对应的根哈希,得到所述调整二叉树的根哈希;

基于所述新增用户数据的哈希值、所述MPT树中的叶子节点最少的分组二叉树对应的根哈希、以及所述调整二叉树的根哈希,更新MPT树中涉及变更的根哈希。

4.如权利要求1所述的方法,基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希,包括:从所述更新后的MPT树中,获取所述新增用户数据的哈希值;

若所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为1,则基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值,更新所述MPT树中涉及变更的根哈希。

5.如权利要求4所述的方法,基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值,更新MPT树中涉及变更的根哈希,包括:基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值,得到所述调整二叉树的根哈希;

基于所述新增用户数据的哈希值、所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值、以及所述调整二叉树的根哈希,更新MPT树中涉及变更的根哈希。

6.如权利要求1所述的方法,在基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希之后,所述方法还包括:获取区块链的MPT树中的更新用户数据、以及所述更新用户数据对应的叶子节点;

从所述MPT树的路径中,得到与所述更新用户数据对应的叶子节点拼接的叶子节点的哈希值、以及由所述更新用户数据拼接得到的根哈希;

基于所述更新用户数据对应的哈希值、与所述更新用户数据对应的叶子节点拼接的叶子节点的哈希值、以及由所述更新用户数据拼接得到的根哈希,更新MPT树中涉及变更的根哈希。

7.如权利要求1 6中任一所述的方法,所述新增用户数据包括下述至少一种:~

所述用户对应的合约数据;

所述用户对应的余额数据。

8.一种区块链中的MPT树的更新装置,包括:

获取单元,获取区块链的MPT树中的新增用户数据;

确定单元,将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;

替换单元,以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;

更新单元,基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;

其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂;至少一个分组二叉树中叶子节点最多的分组二叉树的叶子节点数量为所述MPT树的叶子数量以2为底数取对数值后向下取整。

9. 一种电子设备,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:获取区块链的MPT树中的新增用户数据;

将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;

以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;

基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;

其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂;至少一个分组二叉树中叶子节点最多的分组二叉树的叶子节点数量为所述MPT树的叶子数量以2为底数取对数值后向下取整。

10.一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:获取区块链的MPT树中的新增用户数据;

将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;

以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;

基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;

其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂;至少一个分组二叉树中叶子节点最多的分组二叉树的叶子节点数量为所述MPT树的叶子数量以2为底数取对数值后向下取整。

说明书 :

一种区块链中的MPT树的更新方法、装置和电子设备

技术领域

[0001] 本文件涉及计算机技术领域,尤其涉及一种区块链中的MPT树的更新方法、装置和电子设备。

背景技术

[0002] 目前,当前区块链中的梅克尔帕特里夏树(Merkle Patricia Tree,MPT)中的各节点中有一个flag字段,该字段用于保存各节点中的用户数据通过默克树路径生成的哈希根。当节点中的用户数据发生更新或者插入新的用户数据时,往往需要重新计算并更新几乎整棵默克树的哈希根。显然,这样的数据存储方式在有用户数据需要更新时,其用户数据的更新效率较低。
[0003] 因此,亟需一种区块链中的MPT树的更新方法以提高现有的区块中的数据更新效率。

发明内容

[0004] 本说明书实施例提供了一种区块链中的MPT树的更新方法、装置和电子设备,以解决现有的MPT树中的数据存储方式在有用户数据需要更新时,其用户数据的更新效率较低的问题。
[0005] 为解决上述技术问题,本说明书实施例是这样实现的:
[0006] 第一方面,提出了一种区块链中的MPT树的更新方法,所述方法应用于区块链中的共识节点,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂,所述方法包括:
[0007] 获取区块链的MPT树中的新增用户数据;
[0008] 将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;
[0009] 以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;
[0010] 基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希。
[0011] 第二方面,提出了一种区块链中的MPT树的更新装置,包括:
[0012] 获取单元,获取区块链的MPT树中的新增用户数据;
[0013] 确定单元,将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;
[0014] 替换单元,以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;
[0015] 更新单元,基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;
[0016] 其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂。
[0017] 第三方面,提出一种电子设备,包括:
[0018] 处理器;以及
[0019] 被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:
[0020] 获取区块链的MPT树中的新增用户数据;
[0021] 将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;
[0022] 以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;
[0023] 基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;
[0024] 其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂。
[0025] 第四方面,提出一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:
[0026] 获取区块链的MPT树中的新增用户数据;
[0027] 将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;
[0028] 以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;
[0029] 基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;
[0030] 其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂。
[0031] 本说明书实施例采用上述技术方案至少可以达到下述技术效果:
[0032] 在区块链中的MPT树中新增用户数据时,能够获取区块链的MPT树中的新增用户数据,将该新增用户数据与MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定调整二叉树,再以调整二叉树替换MPT树中的最小分组二叉树,得到更新后的MPT树,最后基于更新后的MPT树,更新MPT树中涉及变更的根哈希。这样在MPT树中新增用户数据时,可以直接基于新增用户数据和MPT树中的叶子节点最少的分组二叉树,确定调整二叉树,并基于调整二叉树中新增用户数据的哈希值和根哈希,计算得到更新后的MPT树,且能避免重新计算整颗MPT树中各二叉树的根哈希,节省了计算资源,并提高了区块链中MPT树中的用户数据的更新效率。

附图说明

[0033] 此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
[0034] 图1为本说明书一个实施例提供的一种区块链中的MPT树的更新方法的实施流程示意图;
[0035] 图2为本说明书一个实施例提供的目标MMR根的生成过程示意图;
[0036] 图3为本说明书一个实施例提供的目标MMR根的一种更新过程示意图;
[0037] 图4为本说明书一个实施例提供的目标MMR根的一种更新过程示意图;
[0038] 图5为本说明书一个实施例提供的目标MMR根的一种更新过程示意图;
[0039] 图6为本说明书一个实施例提供的目标MMR根的一种更新过程示意图;
[0040] 图7为本说明书一个实施例提供的目标MMR根的一种更新过程示意图;
[0041] 图8为本说明书一个实施例提供的目标MMR根的一种更新过程示意图;
[0042] 图9为本说明书一个实施例提供的目标MMR根的一种更新过程示意图;
[0043] 图10为本说明书一个实施例提供的目标MMR根的一种更新过程示意图;
[0044] 图11为本说明书一个实施例提供的一种区块链中的MPT树的更新装置的结构示意图;
[0045] 图12为本说明书一个实施例提供的一种电子设备的结构示意图。

具体实施方式

[0046] 为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本文件一部分实施例,而不是全部的实施例。基于本文件中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。
[0047] 以下结合附图,详细说明本说明书各实施例提供的技术方案。
[0048] 为解决现有的MPT树中的数据存储方式在有用户数据需要更新时,其用户数据的更新效率较低的问题,本说明书实施例提供一种区块链中的MPT树的更新方法。本说明书实施例提供的区块链中的MPT树的更新方法,在区块链中的MPT树中新增用户数据时,能够获取区块链的MPT树中的新增用户数据,将该新增用户数据与MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定调整二叉树,再以调整二叉树替换MPT树中的最小分组二叉树,得到更新后的MPT树,最后基于更新后的MPT树,更新MPT树中涉及变更的根哈希。
[0049] 这样在MPT树中新增用户数据时,可以直接基于新增用户数据和MPT树中的叶子节点最少的分组二叉树,确定调整二叉树,并基于调整二叉树中新增用户数据的哈希值和根哈希,计算得到更新后的MPT树,且能避免重新计算整颗MPT树中各二叉树的根哈希,节省了计算资源,并提高了区块链中MPT树中的用户数据的更新效率。
[0050] 具体地,本说明书一个或多个实施例提供的一种区块链中的MPT树的更新方法的实施流程示意图如图1所示,该方法应用于区块链中的共识节点,该MPT树能够划分为至少一个分组二叉树,至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂,该方法包括:
[0051] S110,获取区块链的MPT树中的新增用户数据;
[0052] 其中,至少一个分组二叉树中叶子节点最多的分组二叉树的叶子节点数量为MPT树的叶子数量以2为底数取对数值后向下取整。
[0053] 假设MPT树中的叶子节点有14个,将这14个叶子节点拆分为多组叶子节点,这多组叶子节点按照叶子节点的数量由多到少的顺序依次排列,一组叶子节点的数量为2的整数次幂,其中,第一组叶子节点的数量为这14个叶子节点中满足2n的最大n时2n的值(即叶子节点的数量以2为底数取对数值后向下取整的值),即第一组叶子节点的数量为2log2(14)=8;第二组叶子节点的数量为剩下的6个叶子节点中满足2n的最大n时2n的值,即第二组叶子节点的数量为2log2(6)=4;第三组叶子节点的数量为剩下的2个用户数据中满足2n的最大n时2n的值,即第三组叶子节点的数量为2log2(2)=2。
[0054] 如图2所示为本说明书实施例提供的现有的一个MPT树的示意图,该MPT树中包括8个叶子节点,每个叶子节点对应于一个用户数据的哈希值,即H1~H8分别为8个用户数据的哈希值。这8个哈希值按照默克树路径映射得到的根哈希Hroot;具体地,首先将这8个哈希值H1H8进行两两合并,即得到Ha=hash(H1, H2),Hb=hash(H3, H4),Hc=hash(H5, H6),Hd=hash~(H7, H8),再对这几个根哈希进行两两合并,即得到Hab= hash(Ha, Hb),Hcd= hash(Hc, Hd),最后对这两个根哈希进行合并,得到Hroot= hash(Hab, Hcd)。
[0055] 应理解,在实际应用中,存储在区块链中的MPT树中叶子节点对应的用户数据往往会随着时间的推移和交易的产生,不断地发生更新,比如增加用户数据(外部账号和合约账号)、用户的状态(比如余额)都会发生变化。也就是说,区块链中的MPT树更新的频率很高。本说明书实施例为了提高区块链中的MPT树的更新效率,减少MPT树更新时的计算量,可以直接基于新增用户数据和MPT树中的叶子节点最少的分组二叉树,确定调整二叉树,并基于调整二叉树中新增用户数据的哈希值和根哈希,计算得到更新后的MPT树,避免重新计算整颗MPT树中各分组二叉树的根哈希。
[0056] 下面以图3 图10所示的几种区块链中的MPT树的更新的示意图,对本说明书实施~例提供的区块链中的MPT树的更新方法进行详细说明。
[0057] 如图3所示为通过本说明书实施例提供的区块链中的MPT树的更新方法,应用于图2所示的MPT树的示意图。在图3中区块链的MPT树中的新增用户数据的哈希值为图3中的H9。
[0058] 如图4所示为通过本说明书实施例提供的区块链中的MPT树的更新方法,应用于图3所示的MPT树的示意图。在图4中区块链的MPT树中的新增用户数据的哈希值为图4中的H10。
[0059] 如图5所示为通过本说明书实施例提供的区块链中的MPT树的更新方法,应用于图4所示的MPT树的示意图。在图5中区块链的MPT树中的新增用户数据的哈希值为图5中的H11。
[0060] 如图6所示为通过本说明书实施例提供的区块链中的MPT树的更新方法,应用于图5所示的MPT树的示意图。在图6中区块链的MPT树中的新增用户数据的哈希值为图6中的H12。
[0061] 如图7所示为通过本说明书实施例提供的区块链中的MPT树的更新方法,应用于图6所示的MPT树的示意图。在图7中区块链的MPT树中的新增用户数据的哈希值为图7中的H13。
[0062] 如图8所示为通过本说明书实施例提供的区块链中的MPT树的更新方法,应用于图7所示的MPT树的示意图。在图8中区块链的MPT树中的新增用户数据的哈希值为图8中的H14。
[0063] 如图9所示为通过本说明书实施例提供的区块链中的MPT树的更新方法,应用于图8所示的MPT树的示意图。在图9中区块链的MPT树中的新增用户数据的哈希值为图9中的H15。
[0064] 如图10所示为通过本说明书实施例提供的区块链中的MPT树的更新方法,应用于图9所示的MPT树的示意图。在图10中区块链的MPT树中的新增用户数据的哈希值为图10中的H16。
[0065] 可选地,为了提高MPT树的安全级别,本说明书实施例还可将多个用户数据按照MMR路径、指定顺序、随机数和指定条件,生成目标MMR根。具体来说,在获取了将多个用户数据按照MMR路径和指定顺序生成的根哈希之后,还可以添加一个随机数,即计算hash(根哈希+随机数+指定条件),并将得到的哈希值作为MPT树的根哈希。
[0066] 应理解,该指定条件可以是难度值,该难度值在实际应用中可以调整,从而调节目标MMR根的生成或更新速度,进而调节存储该目标MMR根的新区块生成或区块的更新速度。
[0067] 应理解,为清楚地表征各个用户数据的具体内容,本说明书实施例中的新增用户数据包括下述至少一种:
[0068] 用户对应的合约数据;
[0069] 用户对应的余额数据。
[0070] S120,将新增用户数据与MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定调整二叉树;
[0071] 如图3所示,新增用户数据的哈希值为图3中的H9,图2所示MPT树中的叶子节点最少的分组二叉树为由叶子节点H1~H8构成的二叉树,其中叶子节点H1~H8构成的二叉树的根哈希为Hroot,那么调整二叉树便可以由新增用户数据的哈希值H9和叶子节点H1 H8构成的二~叉树的根哈希Hroot这两个节点来确定。
[0072] 如图4所示,新增用户数据的哈希值为图4中的H10,图3所示MPT树中的叶子节点最少的分组二叉树为由叶子节点H9构成的二叉树,其中叶子节点H9构成的二叉树的哈希值为H9,那么调整二叉树便可以由新增用户数据的哈希值H10和叶子节点H9这两个节点来确定,即调整二叉树则由叶子节点H9和H10构成。
[0073] 如图5所示,新增用户数据的哈希值为图5中的H11,图4所示MPT树中的叶子节点最少的分组二叉树为由叶子节点H9~H10构成的二叉树,其中叶子节点H9~H10构成的二叉树的根哈希为Hf,那么调整二叉树便可以由新增用户数据的哈希值H11和叶子节点H9~H10构成的二叉树的根哈希Hf这两个节点来确定。
[0074] 如图6所示,新增用户数据的哈希值为图6中的H12,图5所示MPT树中的叶子节点最少的分组二叉树为由叶子节点H11构成的二叉树,那么调整二叉树便可以由新增用户数据的哈希值H12、叶子节点H11这两个节点来确定。由于确定的调整二叉树与MPT树中叶子节点第二少的分组二叉树的数量一致,因此新增用户数据的哈希值H12可以与叶子节点H11进行配对得到与根哈希Hf级别相同的根哈希Hg,从而使得根哈希Hf和根哈希Hg能够合并得到与根哈希Hab和Hcd同级别的根哈希Hj,从而得到一个新的分组二叉树H9~H12。
[0075] 如图7所示,新增用户数据的哈希值为图7中的H13,图6所示MPT树中的叶子节点最少的分组二叉树为由叶子节点H9 H12构成的二叉树,其中叶子节点H9 H12构成的二叉树的根~ ~哈希为Hroot2,那么调整二叉树便可以由新增用户数据的哈希值H13、叶子节点H9~H12构成的二叉树的根哈希Hroot2这两个节点来确定。
[0076] 如图8所示,新增用户数据的哈希值为图8中的H14,图7所示MPT树中的叶子节点最少的分组二叉树为由叶子节点H13构成的二叉树,那么调整二叉树便可以由新增用户数据的哈希值H14、叶子节点H13这两个节点来确定。
[0077] 如图9所示,新增用户数据的哈希值为图9中的H15,图8所示MPT树中的叶子节点最少的分组二叉树为由叶子节点H13~H14构成的二叉树,其中叶子节点H13~H14构成的二叉树的根哈希为Hk,那么调整二叉树便可以由新增用户数据的哈希值H15、叶子节点H13 H14构成的~二叉树的根哈希为Hk这两个节点来确定。
[0078] 如图10所示,新增用户数据的哈希值为图10中的H16,图9所示MPT树中的叶子节点最少的分组二叉树为由叶子节点H15构成的二叉树,那么调整二叉树便可以由新增用户数据的哈希值H16、叶子节点H15这两个节点来确定。由于确定的调整二叉树与MPT树中叶子节点第二少的分组二叉树的数量一致,因此新增用户数据的哈希值H16可以与叶子节点H15进行配对得到与根哈希Hk级别相同的根哈希Hm,从而使得根哈希Hk和根哈希Hm能够合并得到与根哈希Hab、Hcd、Hj同级别的根哈希Hroot2,以及使得根哈希Hroot2和根哈希Hj能够合并得到与根哈希Hroot同级别的根哈希Hroot3,进而使得根哈希Hroot能够与同级别的根哈希Hroot3合并得到新的MPT树的根哈希Hroot4,最后得到一个新的二叉树H1~H16。
[0079] 应理解,为便于查询该MPT树的根哈希,以及对应的生成路径,本说明书实施例中生成的MPT树的根哈希可以存储在区块链中的共识节点的指定字段(比如flag字段)中。
[0080] S130,以调整二叉树替换MPT树中的最小分组二叉树,得到更新后的MPT树;
[0081] 如图3所示,新增用户数据之后,以新增用户数据的哈希值H9替换图2所示的MPT树中的最小分组二叉树。
[0082] 如图4所示,新增用户数据之后,以由叶子节点H9和H10构成的调整二叉树替换图3所示的MPT树中的最小分组二叉树。
[0083] 如图5所示,新增用户数据之后,以调整二叉树为叶子节点H11替换图4所示的MPT树中的最小分组二叉树。
[0084] 如图6所示,新增用户数据之后,以调整二叉树为叶子节点H9 H12构成的调整二叉~树替换图5所示的MPT树中的最小分组二叉树。
[0085] 如图7所示,新增用户数据之后,以调整二叉树为叶子节点为新增用户数据的哈希值H13替换图6所示的MPT树中的最小分组二叉树。
[0086] 如图8所示,新增用户数据之后,以叶子节点为新增用户数据的哈希值H14和叶子节点H13这两个节点构成的调整二叉树,来替换图7所示的MPT树中的最小分组二叉树。
[0087] 如图9所示,新增用户数据之后,以由新增用户数据的哈希值H15构成的调整二叉树替换图8所示的MPT树中的最小分组二叉树。
[0088] 如图10所示,新增用户数据之后,以由叶子节点H1 H16构成的调整二叉树替换图9~所示的MPT树中的最小分组二叉树。
[0089] S140,基于更新后的MPT树,更新MPT树中涉及变更的根哈希。
[0090] 可选地,为了提高MPT树的更新效率,本说明书实施例在MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为偶数时,可直接基于新增用户数据的哈希值、和MPT树中的叶子节点最少的分组二叉树对应的根哈希,更新MPT树中涉及变更的根哈希。具体地,基于更新后的MPT树,更新MPT树中涉及变更的根哈希,包括:
[0091] 从更新后的MPT树中,获取新增用户数据的哈希值;
[0092] 若MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为偶数,则基于新增用户数据的哈希值、和MPT树中的叶子节点最少的分组二叉树对应的根哈希,更新MPT树中涉及变更的根哈希。
[0093] 可选地,基于新增用户数据的哈希值、和MPT树中的叶子节点最少的分组二叉树对应的根哈希,更新MPT树中涉及变更的根哈希,包括:
[0094] 基于新增用户数据的哈希值、和MPT树中的叶子节点最少的分组二叉树对应的根哈希,得到调整二叉树的根哈希;
[0095] 基于新增用户数据的哈希值、MPT树中的叶子节点最少的分组二叉树对应的根哈希、以及调整二叉树的根哈希,更新MPT树中涉及变更的根哈希。
[0096] 上述所述的如图3、图5、图7和图9为MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为偶数时的示意图。在这种情况下,以图3为例,只需要一次计算,即重新计算新增用户数据的哈希值H9和MPT树中的叶子节点最少的分组二叉树的根哈希Hroot,这两个值的根哈希,得到更新后的MPT树的根哈希Hroot1。
[0097] 以图5为例,只需要两次计算,即重新计算新增用户数据的哈希值H11和MPT树中的叶子节点最少的分组二叉树的根哈希Hf,这两个值的根哈希Hroot2,以及根哈希Hroot2和根哈希Hroot这两个值的根哈希,得到更新后的MPT树的根哈希Hroot3。
[0098] 以图7为例,只需要两次计算量,即重新计算新增用户数据的哈希值H13和MPT树中的叶子节点最少的分组二叉树的根哈希Hj,这两个值的根哈希Hroot2,以及根哈希Hroot2和根哈希Hroot这两个值的根哈希,得到更新后的MPT树的根哈希Hroot3。
[0099] 以图9为例,只需要三次计算量,即重新计算新增用户数据的哈希值H15和MPT树中的叶子节点最少的分组二叉树的根哈希Hk,这两个值的根哈希Hroot2,以及根哈希Hroot2和根哈希Hj这两个值的根哈希Hroot3,以及根哈希Hroot和根哈希Hroot3这两个值的根哈希得到更新后的MPT树的根哈希Hroot4。
[0100] 可选地,为了提高MPT树的更新效率,本说明书实施例在MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为1时,可直接基于新增用户数据的哈希值、MPT树中的叶子节点最少的分组二叉树对应的根哈希、以及调整二叉树的根哈希,更新MPT树中涉及变更的根哈希。具体地,基于更新后的MPT树,更新MPT树中涉及变更的根哈希,包括:
[0101] 从更新后的MPT树中,获取新增用户数据的哈希值;
[0102] 若MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为1,则基于新增用户数据的哈希值、和MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值,更新MPT树中涉及变更的根哈希。
[0103] 可选地,基于新增用户数据的哈希值、和MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值,更新MPT树中涉及变更的根哈希,包括:
[0104] 基于新增用户数据的哈希值、和MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值,得到调整二叉树的根哈希;
[0105] 基于新增用户数据的哈希值、MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值、以及调整二叉树的根哈希,更新MPT树中涉及变更的根哈希。
[0106] 上述所述的如图4、图6、图8和图10为MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为1时的示意图。在这种情况下,以图4为例,只需要两次计算,即重新计算新增用户数据的哈希值H10和MPT树中的叶子节点最少的分组二叉树的叶子节点H9,这两个值的根哈希,得到更新后的MPT树的根哈希Hf,再计算根哈希Hf和根哈希Hroot这两个值的根哈希,得到更新后的MPT树的根哈希Hroot2。
[0107] 以图6为例,只需要三次计算,即重新计算新增用户数据的哈希值H12和MPT树中的叶子节点最少的分组二叉树的叶子节点H11,这两个值的根哈希Hg,以及根哈希Hf和根哈希Hg这两个值的根哈希Hj,以及根哈希Hj和Hroot这两个值的根哈希,得到更新后的MPT树的根哈希Hroot2。
[0108] 以图8为例,只需要三次计算,即重新计算新增用户数据的哈希值H14和MPT树中的叶子节点最少的分组二叉树的叶子节点H13,这两个值的根哈希Hk,以及根哈希Hk和根哈希Hj这两个值的根哈希Hroot2,以及根哈希Hroot2和Hroot这两个值的根哈希,得到更新后的MPT树的根哈希Hroot3。
[0109] 以图10为例,只需要四次计算量,即重新计算新增用户数据的哈希值H16和MPT树中的叶子节点最少的分组二叉树的叶子节点H15,这两个值的根哈希Hm,以及根哈希Hm和根哈希Hk这两个值的根哈希Hroot2,以及根哈希Hroot2和根哈希Hj这两个值的根哈希Hroot3,最后计算根哈希Hroot3和Hroot这两个值的根哈希,得到更新后的MPT树的根哈希Hroot4。
[0110] 可选地,为了提高MPT树的更新效率,可将MPT树的路径存储在指定数据库中,在有叶子节点对应的账号状态发生改变时,比如余额发生变化,可从指定数据库中调用MPT书的路径,并从区块链的指定字段中调取MPT树的根哈希。具体地,在基于更新后的MPT树,更新MPT树中涉及变更的根哈希之后,该方法还包括:
[0111] 获取区块链的MPT树中的更新用户数据、以及更新用户数据对应的叶子节点;
[0112] 从MPT树的路径中,得到与更新用户数据对应的叶子节点拼接的叶子节点的哈希值、以及由更新用户数据拼接得到的根哈希;
[0113] 基于更新用户数据对应的哈希值、与更新用户数据对应的叶子节点拼接的叶子节点的哈希值、以及由更新用户数据拼接得到的根哈希,更新MPT树中涉及变更的根哈希。
[0114] 在区块链中的MPT树中新增用户数据时,能够获取区块链的MPT树中的新增用户数据,将该新增用户数据与MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定调整二叉树,再以调整二叉树替换MPT树中的最小分组二叉树,得到更新后的MPT树,最后基于更新后的MPT树,更新MPT树中涉及变更的根哈希。这样在MPT树中新增用户数据时,可以直接基于新增用户数据和MPT树中的叶子节点最少的分组二叉树,确定调整二叉树,并基于调整二叉树中新增用户数据的哈希值和根哈希,计算得到更新后的MPT树,且能避免重新计算整颗MPT树中各二叉树的根哈希,节省了计算资源,并提高了区块链中MPT树中的用户数据的更新效率。
[0115] 如图11所示,为本说明书的一个实施例提供的一种区块链中的MPT树的更新装置1100的结构示意图。请参见图11,在一种软件实施方式中,区块链中的MPT树的更新装置
1100可包括获取单元1101、确定单元1102、替换单元1103和更新单元1104,其中:
[0116] 获取单元1101,获取区块链的MPT树中的新增用户数据;
[0117] 确定单元1102,将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;
[0118] 替换单元1103,以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;
[0119] 更新单元1104,基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;
[0120] 其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂。
[0121] 在区块链中的MPT树中新增用户数据时,能够获取区块链的MPT树中的新增用户数据,将该新增用户数据与MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定调整二叉树,再以调整二叉树替换MPT树中的最小分组二叉树,得到更新后的MPT树,最后基于更新后的MPT树,更新MPT树中涉及变更的根哈希。这样在MPT树中新增用户数据时,可以直接基于新增用户数据和MPT树中的叶子节点最少的分组二叉树,确定调整二叉树,并基于调整二叉树中新增用户数据的哈希值和根哈希,计算得到更新后的MPT树,且能避免重新计算整颗MPT树中各二叉树的根哈希,节省了计算资源,并提高了区块链中MPT树中的用户数据的更新效率。
[0122] 可选地,在一种实施方式中,所述至少一个分组二叉树中叶子节点最多的分组二叉树的叶子节点数量为所述MPT树的叶子数量以2为底数取对数值后向下取整。
[0123] 可选地,在一种实施方式中,所述更新单元1104,用于:
[0124] 从所述更新后的MPT树中,获取所述新增用户数据的哈希值;
[0125] 若所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为偶数,则基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树对应的根哈希,更新所述MPT树中涉及变更的根哈希。
[0126] 可选地,在一种实施方式中,所述新增用户数据包括下述至少一种:
[0127] 所述用户对应的合约数据;
[0128] 所述用户对应的余额数据。
[0129] 可选地,在一种实施方式中,所述更新单元1104,用于:
[0130] 基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树对应的根哈希,得到所述调整二叉树的根哈希;
[0131] 基于所述新增用户数据的哈希值、所述MPT树中的叶子节点最少的分组二叉树对应的根哈希、以及所述调整二叉树的根哈希,更新MPT树中涉及变更的根哈希。
[0132] 可选地,在一种实施方式中,所述更新单元1104,用于:
[0133] 从所述更新后的MPT树中,获取所述新增用户数据的哈希值;
[0134] 若所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的数量为1,则基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值,更新所述MPT树中涉及变更的根哈希。
[0135] 可选地,在一种实施方式中,所述更新单元1104,用于:
[0136] 基于所述新增用户数据的哈希值、和所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值,得到所述调整二叉树的根哈希;
[0137] 基于所述新增用户数据的哈希值、所述MPT树中的叶子节点最少的分组二叉树中的叶子节点的哈希值、以及所述调整二叉树的根哈希,更新MPT树中涉及变更的根哈希。
[0138] 可选地,在一种实施方式中,所述更新单元1104在基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希之后,还用于:
[0139] 获取区块链的MPT树中的更新用户数据、以及所述更新用户数据对应的叶子节点;
[0140] 从所述MPT树的路径中,得到与所述更新用户数据对应的叶子节点拼接的叶子节点的哈希值、以及由所述更新用户数据拼接得到的根哈希;
[0141] 基于所述更新用户数据对应的哈希值、与所述更新用户数据对应的叶子节点拼接的叶子节点的哈希值、以及由所述更新用户数据拼接得到的根哈希,更新MPT树中涉及变更的根哈希。
[0142] 区块链中的MPT树的更新装置1100能够实现图1 图10的方法实施例的方法,具体~可参考图1 图10所示实施例的区块链中的MPT树的更新方法,不再赘述。
~
[0143] 图12是本说明书的一个实施例提供的电子设备的结构示意图。请参考图12,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
[0144] 处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0145] 存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
[0146] 处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成区块链中的MPT树的更新装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
[0147] 获取区块链的MPT树中的新增用户数据;
[0148] 将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;
[0149] 以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;
[0150] 基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;
[0151] 其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂。
[0152] 上述如本说明书图1 图10所示实施例揭示的区块链中的MPT树的更新方法可以应~用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书一个或多个实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书一个或多个实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
[0153] 该电子设备还可执行图1 图10的区块链中的MPT树的更新方法,本说明书在此不~再赘述。
[0154] 当然,除了软件实现方式之外,本说明书的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
[0155] 本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1 图10所示实施例的方法,并具体用于执~行以下操作:
[0156] 获取区块链的MPT树中的新增用户数据;
[0157] 将所述新增用户数据与所述MPT树中的叶子节点最少的分组二叉树作为调整二叉树的两个节点,确定所述调整二叉树;
[0158] 以所述调整二叉树替换所述MPT树中的最小分组二叉树,得到更新后的MPT树;
[0159] 基于所述更新后的MPT树,更新所述MPT树中涉及变更的根哈希;
[0160] 其中,所述MPT树能够划分为至少一个分组二叉树,所述至少一个分组二叉树中不含具有相同叶子节点的二叉树,且任意一个分组二叉树的叶子节点数量为2的整数次幂。
[0161] 应理解,上述指令当被包括多个应用程序的便携式电子设备执行时,能够使上文所述的区块链中的MPT树的更新装置实现图1 图10所示实施例的功能。由于原理相同,本文~不再赘述。
[0162] 总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书一个或多个实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例的保护范围之内。
[0163] 上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0164] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0165] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0166] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0167] 以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。