具体技术细节
[0007] 所描述的主题的实施例可以单独或组合地包括一个或多个特征。
[0008] 例如,在一个实施例中,公开了一种计算机实现的由区块链节点执行的用于存储区块链数据的方法。该方法包括在创建区块链的区块期间生成与固定深度默克尔树(FDMT)相关联的当前状态树的快照,其中,当前状态树存储与区块链的最新区块相对应的状态信息,并存储当前状态树的快照。
[0009] 在一些实施例中,可以使用系统、方法或计算机程序,或者系统、方法和计算机程序的任何组合来实现这些一般和特定方面。前述和其他描述的实施例可以各自可选地包括一个或多个以下方面:
[0010] 在一些实施例中,FDMT包括存储与区块链的每个区块相对应的状态信息的历史状态树。
[0011] 在一些实施例中,历史状态树包括键值对(KVP),其中,KVP中的键是KVP中的相应值的哈希值。
[0012] 在一些实施例中,当前状态树包括KVP,其中,KVP中的键包括与当前状态树的节点相对应的节点标识(ID)和与最新区块相对应的区块ID。
[0013] 在一些实施例中,当前状态树与合约账户相关联,并且其中,当前状态树是对合约账户的存储内容进行编码的树。
[0014] 在一些实施例中,快照包括与合约账户相关联的Merkle路径,该Merkle路径被包括在与最新区块相关联的世界状态树中。
[0015] 在一些实施例中,所述方法还包括:添加与最新区块相关联的区块ID作为快照的ID。
[0016] 在一些实施例中,所述方法还包括:接收用于检索与最新区块相对应的状态信息的请求;基于快照的ID通过本地调用确定存在状态信息的快照;以及响应于该请求,基于快照提供状态信息。
[0017] 在一些实施例中,所述方法还包括在存储了快照之后,删除与FDMT相关联的历史状态树。
[0018] 在一些实施例中,快照是基于RocksDB中的检查点功能生成的。
[0019] 在另一实施例中,公开了另一种计算机实现的由区块链节点执行的用于存储区块链数据的方法。所述方法包括:将标记消息从区块链网络的第一分片中的第一区块链节点发送至区块链网络的中继链中的第二区块链节点,从第二区块链节点接收标记区块,其中,标记区块与中继链相关联并且包括标记消息,创建与第一分片相关联的第一区块,该第一区块包括与中继链相关联的、紧接在标记区块之前的区块,创建与第一分片相关联的、包括标记区块的第二区块,在创建与第一分片相关联的第二区块期间,生成与第一分片关联的最新区块相对应的状态信息的快照,以及存储状态信息的快照。
[0020] 在一些实施例中,可以使用系统,方法或计算机程序,或者系统、方法和计算机程序的任何组合来实现这些一般和特定方面。前述和其他描述的实施例可以各自可选地包括一个或多个以下方面:
[0021] 在一些实施例中,与最新区块相对应的状态信息被存储在MPT中。
[0022] 在一些实施例中,与最新区块相对应的状态信息被存储在与FDMT相关联的当前状态树中。
[0023] 在一些实施例中,FDMT包括存储与区块链的每个区块相关联的状态信息的历史状态树。
[0024] 在一些实施例中,所述方法还包括在存储了状态信息的快照之后,删除历史状态树。
[0025] 在一些实施例中,历史状态树包括KVP,其中,KVP中的键是KVP中的相应值的哈希值。
[0026] 在一些实施例中,当前状态树包括KVP,其中,KVP中的键包括与当前状态树的节点相对应的节点ID和与最新区块相对应的区块ID。
[0027] 在一些实施例中,当前状态树与合约账户相关联,并且其中,当前状态树是对合约账户的存储内容进行编码的树。
[0028] 在一些实施例中,快照包括与合约账户相关联的Merkle路径,该Merkle路径被包括在与最新区块相关联的世界状态树中。
[0029] 在一些实施例中,所述方法还包括添加与标记区块相关联的区块ID或与最新区块相关联的区块ID,以作为快照的ID。
[0030] 在一些实施例中,所述方法还包括接收用于检索与最新区块相对应的状态信息的请求;基于快照的ID通过本地调用确定存在状态信息的快照;以及响应于该请求,基于快照提供状态信息。
[0031] 在一些实施例中,标记区块包括在区块链网络的第一分片和第二分片之间通信的一个或多个消息。
[0032] 在一些实施例中,快照是基于RocksDB中的检查点功能生成的。
[0033] 应当理解的是,根据本文的方法可包括本文描述的方面和特征的任何组合。也就是说,根据本文的方法不限于本文具体描述的方面和特征的组合,还包括所提供的方面和特征的任何组合。
[0034] 在附图和以下描述中阐述了本文的一个或多个实施例的细节。根据说明书和附图以及权利要求书,本文的其他特征和优点将显现。
法律保护范围
涉及权利要求数量15:其中独权6项,从权-6项
1.一种计算机实现的用于区块链数据存储的方法,所述方法包括:
将标记消息从区块链网络的第一分片中的第一区块链节点发送至所述区块链网络的中继链中的第二区块链节点;
从所述第二区块链节点接收标记区块,其中,所述标记区块与所述中继链相关联并且包括所述标记消息;
创建与所述第一分片相关联的第一区块,所述第一区块包括与所述中继链相关联的、紧接在所述标记区块之前的区块;
创建与所述第一分片相关联的、包括所述标记区块的第二区块;
在创建与所述第一分片相关联的所述第二区块期间,生成与所述第一分片关联的最新区块相对应的状态信息的快照;以及
存储所述状态信息的所述快照。
2.如权利要求1所述的方法,其中,与所述最新区块相对应的所述状态信息存储在默克尔帕特里夏树MPT中。
3.如权利要求1所述的方法,其中,与所述最新区块相对应的所述状态信息存储在与固定深度默克尔树FDMT相关联的当前状态树中。
4.如权利要求3所述的方法,其中,所述FDMT包括存储与所述区块链的每个区块相关联的状态信息的历史状态树。
5.如权利要求4所述的方法,还包括:
在存储了所述状态信息的所述快照之后,删除所述历史状态树。
6.如权利要求5所述的方法,其中,所述历史状态树包括键值对KVP,KVP中的键是所述KVP中的相应值的哈希值。
7.如权利要求5所述的方法,其中,所述当前状态树包括KVP,KVP中的键包括与所述当前状态树的节点相对应的节点标识ID以及与所述最新区块相对应的区块ID。
8.如权利要求7所述的方法,其中,
所述当前状态树与合约账户相关联,并且
所述当前状态树是对所述合约账户的存储内容进行编码的树。
9.如权利要求8所述的方法,其中,所述快照包括与所述合约账户相关联的默克尔Merkle路径,所述Merkle路径被包括在与所述最新区块相关联的世界状态树中。
10.如前述任一项权利要求所述的方法,还包括:
添加与所述标记区块相关联的区块ID或与所述最新区块相关联的区块ID,作为所述快照的ID。
11.如权利要求10所述的方法,还包括:
接收用于检索与所述最新区块相对应的所述状态信息的请求;
基于所述快照的ID通过本地调用确定存在所述状态信息的所述快照;以及响应于所述请求,基于所述快照提供所述状态信息。
12.如前述任一项权利要求所述的方法,其中,所述标记区块包括所述区块链网络的所述第一分片与第二分片之间通信的一个或多个消息。
13.如前述任一项权利要求所述的方法,其中,所述快照是基于RocksDB中的检查点功能生成的。
14.一种系统,包括:
一个或多个处理器;以及
耦接到所述一个或多个处理器并且其上存储有指令的一个或多个计算机可读存储器,所述指令能够由所述一个或多个处理器执行以执行权利要求1至13中任一项所述的方法。
15.一种用于区块链数据存储的装置,所述装置包括用于执行权利要求1至13中任一项所述的方法的多个模块。