一种计算目标区块的状态根的方法和区块链节点技术

技术编号:38319259 阅读:13 留言:0更新日期:2023-07-29 09:01
本说明书实施例提供了一种计算目标区块的状态根的方法和区块链节点,该方法由区块链节点执行,区块链节点包括N个存储单元,每个存储单元中通过状态树存储目标区块关联的部分状态数据,该方法包括:获取各个状态树的第一状态根;根据与N个存储单元分别对应的N个所述第一状态根,计算目标区块的第二状态根。计算目标区块的第二状态根。计算目标区块的第二状态根。

【技术实现步骤摘要】
一种计算目标区块的状态根的方法和区块链节点


[0001]本说明书实施例涉及区块链
,更具体地,涉及一种计算目标区块的状态根的方法和区块链节点。

技术介绍

[0002]区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。

技术实现思路

[0003]本说明书实施例旨在提供一种计算目标区块的状态根的方案,可以在区块链节点包括多个存储单元,每个存储单元保存目标区块的部分状态数据并具有针对部分状态数据的状态根的场景下,提供计算整个目标区块的状态根的方法。
[0004]为实现上述目的,本说明书第一方面提供一种计算目标区块的状态根的方法,所述方法由区块链节点执行,所述区块链节点包括N个存储单元,每个存储单元中通过状态树存储所述目标区块关联的部分状态数据,所述方法包括:获取各个所述状态树的第一状态根;根据与所述N个存储单元分别对应的N个所述第一状态根,计算所述目标区块的第二状态根。
[0005]本说明书第二方面提供一种区块链节点,所述区块链节点包括N个存储单元,每个存储单元中通过状态树存储所述目标区块关联的部分状态数据,所述区块链节点还包括:获取单元,用于获取各个所述状态树的第一状态根;计算单元,用于根据与所述N个存储单元分别对应的N个所述第一状态根,计算所述目标区块的第二状态根。
[0006]本说明书第三方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序由计算机或处理器执行时,令计算机或处理器执行如第一方面所述的方法。
[0007]本说明书第四方面提供一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现如第一方面所述的方法。
[0008]在本说明书实施例提供的计算目标区块的状态根的方案中,可以在区块链节点包括多个存储单元,每个存储单元保存目标区块的部分状态数据且其保存的部分状态数据具有对应的状态根的分布式区块链存储场景下,提供计算目标区块的状态根的方法。
附图说明
[0009]通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:
[0010]图1是一种区块链系统架构示意图;
[0011]图2是一种区块链状态数据的存储结构示意图;
[0012]图3是一种区块链状态树的结构示意图;
[0013]图4是一实施例中的区块链节点中多分片存储的架构示意图;
[0014]图5是另一种区块链状态树的结构示意图;
[0015]图6是本说明书一实施例中的一种计算目标区块的状态根的方法的示意图;
[0016]图7是本说明书一实施例中的一种计算目标区块的状态根的方法的流程图;
[0017]图8是本说明书一实施例中的一种区块链节点的架构图;
[0018]图9是本说明书另一实施例中的一种区块链节点的架构图。
具体实施方式
[0019]下面将结合附图描述本说明书实施例。
[0020]为了使本
的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
[0021]图1示出一种区块链架构图。如图1所示的区块链中例如包含8个节点。节点之间的连线示意性的表示P2P(Peer to Peer,点对点)连接。这些节点上可存储全量的账本,即存储全部区块和全部账户的状态。其中,区块链中的每个节点通过执行相同的交易而产生区块链中的相同的状态,区块链中的每个节点存储相同的状态数据库。可以理解,图1中虽然示出了区块链中包括8个节点,本说明书实施例不限于此,而是可以包括其他数目的节点。
[0022]为了说明更好的说明本申请中的计算目标区块的状态根的方法,先对常规的区块链状态存储结构做一些介绍。鉴于很多区块链平台和应用是基于以太坊(Ethereum)的底层技术而构建的,这里先介绍以太坊的状态存储结构。以太坊相比于一种虚拟货币网络进行了拓展,采用账户系统和世界状态,可以直接用账户来显示的记录账户的余额和状态。以太坊的账户可以分为两种类型:
[0023]外部账户(Externally owned account):用户的账户,例如虚拟货币拥有者账户。
[0024]合约账户(contract account):存储执行的智能合约代码以及智能合约代码中状态的值,通常只能通过外部账户调用激活。
[0025]外部账户和合约账户的设计,实际上是账户地址到账户状态的映射。账户的状态通常包括nonce、balance、storage_root、codeHash等字段。nonce、balance在外部账户和合约账户中都存在。codeHash和storage_root属性一般仅在合约账户上有效。
[0026]nonce:计数器。对于外部账户,这个数字代表从账户地址发送的交易数量;对于合约账户,是账户创建的合约数量。
[0027]balance:这个地址拥有的虚拟货币的数量。
[0028]storage_root:一个MPT树根节点的哈希,这个MPT树对合约账户的状态变量的存储进行组织。
[0029]codeHash:智能合约代码的哈希值。对于合约账户,这是智能合约被哈希计算并存储的代码;对于外部账户,由于不包括智能合约,因此codeHash字段一般可以是空字符串/全0字符串。
[0030]MPT全称为Merkle Patricia Tree,是结合了Merkle Tree(默克尔树)和Patricia Tree(压缩前缀树,一种更节省空间的Trie树,字典树)的一种树形结构。Merkle Tree,默克尔树算法对每个交易都计算一个Hash值,然后两两连接再次计算Hash,一直到最顶层的Merkle根。以太坊中采用改进的MPT树,例如是16叉树的结构,通常也简称为MPT树。
[0031]以太坊MPT树的数据结构包括状态树(state trie)。状态树中包含以太坊网络中每个账户所对应的存储内容的键值对(key and value pair)。状态树中的“键”可以是一个的160bits标识符(以太坊账户的地址),这个账户地址分布于从状态树的根节点开始到叶子节点的存储中。状态树中的“值”是通过对以太坊账户的信息进行编码(使用递归长度字典编码(Recursive

Length Prefix encoding,RLP)方法)生成的。如前所述,对于外部账户来说,值可以例本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种计算目标区块的状态根的方法,所述方法由区块链节点执行,所述区块链节点包括N个存储单元,每个存储单元中通过状态树存储所述目标区块关联的部分状态数据,所述方法包括:获取各个所述状态树的第一状态根;根据与所述N个存储单元分别对应的N个所述第一状态根,计算所述目标区块的第二状态根。2.根据权利要求1所述的方法,其中,所述区块链节点中运行有M个存储进程、和计算进程,每个所述存储进程分别对应于所述N个存储单元中的多个存储单元,所述M个存储进程中包括第一存储进程,所述获取各个所述状态树的第一状态根包括:所述计算进程向所述第一存储进程发送第一请求;所述计算进程从所述第一存储进程接收所述第一存储进程对应的多个存储单元的所述第一状态树的第一状态根。3.根据权利要求1或2所述的方法,其中,所述N个存储单元分别具有对应的单元序号;所述根据与所述N个存储单元分别对应的N个所述第一状态根,计算所述目标区块的第二状态根包括:根据所述单元序号,组合所述N个存储单元分别对应的所述N个第一状态根,得到第一组合值;根据所述第一组合值,确定所述第二状态根。4.根据权利要求3所述的方法,其中,根据所述第一组合值,确定所述第二状态根,包括:根据所述第一组合值的哈希值,确定所述第二状态根。5.根据权利要求2所述的方法,其中,所述区块链节点包括至少一个存储节点,每个存储节点上运行有至少一个所述存储进程。6.根据权利要求4所述的方法,其中,所述区块链节点中运行有辅助进程;所述方法还包括:将所述第二状态根和所述第一组合值发送到所述辅助进程,以用于通过所述辅助进程将所述第二状态根和第一组合值关联保存。7.根据权利要求6所述的...

【专利技术属性】
技术研发人员:张兆勇梁召远吴静
申请(专利权)人:蚂蚁区块链科技上海有限公司
类型:发明
国别省市:

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

1