区块链数据存储方法及装置、电子设备制造方法及图纸

技术编号:32574923 阅读:20 留言:0更新日期:2022-03-09 17:03
一种区块链数据存储方法及装置、电子设备,方法包括:获取待存储的区块链数据的key

【技术实现步骤摘要】
区块链数据存储方法及装置、电子设备


[0001]本说明书一个或多个实施例涉及区块链
,尤其涉及一种区块链数据存储方法及装置、电子设备。

技术介绍

[0002]区块链技术,也被称之为分布式账本技术,是一种由若干台节点设备共同参与“记账”,共同存储和维护一份完整的分布式数据库的新兴技术。对于区块链的节点设备来说,需要存储和维护的区块链数据,通常包括区块数据、区块链中的区块链账户对应的账户状态数据;而区块数据又可以进一步包括区块头数据、区块中的区块交易数据、以及与区块中的区块交易数据对应的交易收据,等等。
[0003]区块链的节点设备在存储以上示出的各种区块链数据时,通常可以将上述各种区块链数据以key

value键值对的形式,组织成Merkle树在数据库中存储。当需要查询节点设备存储的上述各种区块链数据时,可以通过将上述各种区块链数据的key作为查询索引,遍历上述Merkle树来高效的查询数据。

技术实现思路

[0004]提出一种区块链数据存储方法,所述方法包括:
[0005]获取待存储的区块链数据的key

value键值对;
[0006]将所述待存储的区块链数据的key

value键值对转换成逻辑的树形结构上的根节点、中间节点和叶子节点;所述根节点、中间节点包括主位置和用于存放所述区块链数据的key中的字符的多个子位置;所述主位置包括多个分别与各子位置对应的,用于存放各子位置中的存储内容的hash值的槽位;所述子位置包括多个用于存放所述区块链数据的key中的字符的槽位;所述子位置中的槽位用于存储与该节点链接的下一层节点的hash值;所述根节点、中间节点的hash值为所述根节点、中间节点中的主位置中的存储内容的hash;
[0007]将所述根节点、中间节点和叶子节点的key

value键值对存储在数据库中;所述叶子节点、所述中间节点和所述根节点的key

value键值对中,value为节点的存储内容,key为节点的存储内容的hash值。
[0008]还提出一种区块链数据存储装置,所述装置包括:
[0009]获取模块,获取待存储的区块链数据的key

value键值对;
[0010]转换模块,将所述待存储的区块链数据的key

value键值对转换成逻辑的树形结构上的根节点、中间节点和叶子节点;所述根节点、中间节点包括主位置和用于存放所述区块链数据的key中的字符的多个子位置;所述主位置包括多个分别与各子位置对应的,用于存放各子位置中的存储内容的hash值的槽位;所述子位置包括多个用于存放所述区块链数据的key中的字符的槽位;所述子位置中的槽位用于存储与该节点链接的下一层节点的hash值;所述根节点、中间节点的hash值为所述根节点、中间节点中的主位置中的存储内容的hash;
[0011]存储模块,将所述根节点、中间节点和叶子节点的key

value键值对存储在数据库中;所述叶子节点、所述中间节点和所述根节点的key

value键值对中,value为节点的存储内容,key为节点的存储内容的hash值。
[0012]以上技术方案中,一方面,由于逻辑的树形结构中的每一个根节点和中间节点,均包括分别代表不同字符的多个位置;并且,各位置又进一步包括多个分别代表不同字符的槽位;因此,通过这种设计,使得每一个根节点和中间节点将具有更大的数据存储容量和数据承载能力,从而在将上述逻辑的树形结构中的根节点和中间节点写入数据库进行存储时;或者,在访问数据库中存储的逻辑的树形结构中的根节点和中间节点时,可以使得根节点和中间节点的数据存储容量,与承载上述数据库的存储介质的单次IO读写的容量更加适配,从而可以充分利用承载上述数据库的存储介质自身的IO读写能力,提升数据读写效率;而且,上述逻辑的树形结构上节点的数据存储容量和数据承载能力的提升,势必也会导致上述逻辑的树形结构整体的数据存储容量和数据承载能力的提升,使得上述逻辑的树形结构上可以存储更多的区块链数据;
[0013]第二方面,由于逻辑的树形结构中的每一个根节点和中间节点均采用统一的数据结构;对于逻辑的树形结构中的根节点和中间节点来说,其实际存储的区块链数据的key的字符前缀的字符长度也将保持固定;因此,通过这种设计,可以避免由于根节点和中间节点其实际存储的字符长度不固定,而导致的节点的频繁分裂,从而可以确保逻辑的树形结构中所包含的根节点和中间节点的层数,始终处于一个相对稳定的状态;
[0014]第三方面,由于上述根节点和中间节点的主位置包括多个分别与各子位置对应的,用于填充各子位置的hash的槽位;上述子位置又包括多个用于填充该字符节点链接的下一层节点的hash值的槽位;而且,上述根节点和中间节点的hash值可以用该根节点和中间节点中的主位置的hash表示;因此,当上述树形结构上的上述根节点或中间节点中的子位置中的任一槽位填充的hash值发生更新后,则在重新计算上述根节点或者中间节点的hash值时,只需要将该发生数据更新的子位置中各个槽位中填充的hash值进行拼接,并将拼接出的hash值作为计算参数重新进行hash计算,再将计算出的hash值填充至上述根节点或者中间节点中的主位置中与该子位置对应的槽位,然后再对主位置中的各槽位填充的hash进行拼接,再将拼接出的hash值作为计算参数重新进行hash计算即可得到上述根节点或者中间节点的hash;而对于未发生数据更新的其它子位置中各个槽位填充的hash值,将不再需要进行拼接后作为计算参数参与hash计算,从而可以降低在重新计算该根节点或者中间节点的hash值时的hash计算量和计算时长,提升hash计算的计算效率。
附图说明
[0015]图1是一示例性实施例提供的一种将区块链的账户状态数据组织成MPT状态树的示意图;
[0016]图2是一示例性实施例提供的一种将合约账户对应的存储空间中存储的合约数据组织成MPT storage树的示意图;
[0017]图3是一示例性实施例提供的一种区块链数据存储方法的流程图;
[0018]图4是一示例性实施例提供的一种FDMT树的树形结构图;
[0019]图5是一示例性实施例提供的另一种FDMT树的树形结构图;
[0020]图6是一示例性实施例提供的一种Treenode的结构图;
[0021]图7是一示例性实施例提供的一种bucket数据桶的结构图;
[0022]图8是一示例性实施例提供的一种为FDMT树上的节点设置节点ID的示意图;
[0023]图9是一示例性实施例提供的一种对FDMT树上的Tree node进行递归压缩的示意图;
[0024]图10是一示例性实施例提供的一种将账户状态数据写入Merkle状态存储树的示意图;
[0025]图11是一示例性实施例提供的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种区块链数据存储方法,所述方法包括:获取待存储的区块链数据的key

value键值对;所述区块链数据的key对应的字符串包括字符前缀和字符后缀;将所述待存储的区块链数据的key

value键值对转换成逻辑的树形结构上的根节点、中间节点和叶子节点;所述根节点、中间节点用于存储所述字符前缀中的字符;所述叶子节点用于存储所述字符后缀和所述区块链数据的Value;所述根节点、中间节点包括主位置和用于存放所述区块链数据的key中的字符的多个子位置;所述主位置包括多个分别与各子位置对应的,用于存放各子位置的hash值的槽位;所述子位置包括多个用于存放所述区块链数据的key中的字符的槽位;所述子位置中的槽位用于存储与该槽位所在的节点链接的下一层节点的hash值;所述子位置的hash值用所述子位置中的各个槽位所填充的hash值进行拼接后进行hash计算得到的hash值表示;所述根节点、中间节点的hash值为所述根节点、中间节点中的主位置中的存储内容的hash;将所述根节点、中间节点和叶子节点的key

value键值对存储在数据库中。2.根据权利要求1所述的方法,所述叶子节点、所述中间节点和所述根节点的key

value键值对中,value为节点的存储内容,key为节点的存储内容的hash值。3.根据权利要求1所述的方法,所述方法还包括:确定所述树形结构上的叶子节点的存储容量是否满足节点分裂条件;如果所述叶子节点的存储容量满足节点分裂条件,从所述叶子节点中分裂出至少一个所述中间节点;所述中间节点用于存储从所述叶子节点存放的字符后缀中分裂出的字符。4.根据权利要求3所述的方法,所述根节点、所述中间节点存储的字符,为所述根节点、所述中间节点中的各子位置所代表的字符,与所述各子位置中填充了hash值的槽位所代表的字符,进行拼接生成的字符串。5.根据权利要求4所述的方法,所述根节点、所述中间节点包括的子位置的数量,与所述子位置包括的槽位的数量相同。6.根据权利要求5所述的方法,所述根节点、所述中间节点包括分别代表不同的16进制字符的16个子位置;所述子位置包括16个分别代表不同的16进制字符的槽位;所述主位置包括与各子位置对应的16个槽位。7.根据权利要求1所述的方法,所述叶子节点为bucket数据桶;所述bucket数据桶包含若干条数据记录;所述数据记录中存储的数据内容包括所述字符后缀和所述区块链数据的Value。8.根据权利要求3所述的方法,所述确定所述树形结构上的叶子节点的存储容量是否满足节点分裂条件,包括:确定所述树形结构上的叶子节点是否发生数据更新;如果所述树形结构上的任一叶子节点发生数据更新,在重新计算所述叶子节点的hash值,并基于该hash值与所述叶子节点上一层的节点进行重新链接之前,进一步确定所述叶子节点的存储容量是否满足节点分裂条件。9.根据权利要求8所述的方法,所述方法还包括:确定所述树形结构上的中间节点是否发生数据更新;如果所述树形结构上的任一中间节点发生数据更新,在重新计算所述中间节点的hash
值,并基于该hash值与该中间节点上一层的节点进行重新链接之前,确定所述中间节点的存储容量是否满足节点合并条件;如果所述中间节点的存储容量满足节点合并条件,进一步将所述中间节点,合并至与该中间节点链接的下一层的叶子节点。10.根据权利要求9所述的...

【专利技术属性】
技术研发人员:俞本权卓海振陆钟豪
申请(专利权)人:蚂蚁区块链科技上海有限公司
类型:发明
国别省市:

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

1