一种区块链状态数据存储方法、设备和存储介质技术

技术编号:22531800 阅读:13 留言:0更新日期:2019-11-13 09:06
本发明专利技术提供一种区块链状态数据存储方法,包括:在执行第一区块中的各交易后,分别判断待存储的各项第一状态数据为终结状态或非终结状态:若第一状态数据为非终结状态,则将第一状态数据存入状态树;生成状态树的树根哈希;先删除终结状态,再计算状态树哈希根据终结状态的各项第一状态数据生成第一根哈希,根据第一根哈希更新终结状态数据根哈希;根据树根哈希和更新后的终结状态数据根哈希生成第一区块的区块高度的状态根哈希。本发明专利技术通过将本区块的第一根哈希和上一区块的终结状态数据根哈希结合生成本区块更新后的状态数据根哈希,减少了状态数据的存储量,提高了后续存储效率,查询效率。

A blockchain state data storage method, device and storage medium

The invention provides a blockchain state data storage method, which includes: after executing each transaction in the first block, judge each first state data to be stored as the end state or non end state respectively: if the first state data is non end state, store the first state data in the state tree; generate the tree root hash of the state tree; delete the end state first, and then calculate the state The tree hash generates the first hash according to the first state data of the end state, updates the end state data root hash according to the first hash, and generates the state root hash of the block height of the first block according to the tree root hash and the updated end state data root hash. The invention reduces the storage amount of state data, improves the subsequent storage efficiency and query efficiency by combining the first hash of the block with the end state data root hash of the previous block to generate the updated state data root hash of the cost block.

【技术实现步骤摘要】
一种区块链状态数据存储方法、设备和存储介质
本申请涉及计算机
,具体涉及一种区块链状态数据存储方法、设备和存储介质。
技术介绍
随着区块链交易的增长,交易产生的状态数据也越来越多,继而存储的数据量越来越大,占用越来越多的存储空间,然而状态数据中有的非终结状态数据作用很大,如账户余额等,而有的终结状态数据,如交易订单本身完成后的数据,在不进行数据查询的时候一般用不到这类数据,这样就造成了大量该类数据占用资源的情况,同时,对于用户需要查询某区块高度的账户余额时,需要过滤掉大量的终结状态数据,导致查询效率大大降低。
技术实现思路
鉴于现有技术中的上述缺陷或不足,期望提供一种减少存储空间的区块链状态数据存储方法、设备和存储介质。第一方面,本专利技术提供一种区块链状态数据存储方法,包括:在执行第一区块中的各交易后,分别判断待存储的各项第一状态数据为终结状态或非终结状态:若第一状态数据为非终结状态,则将第一状态数据存入状态树;生成状态树的树根哈希;先删除终结状态,再计算状态树哈希根据终结状态的各项第一状态数据生成第一根哈希,根据第一根哈希更新终结状态数据根哈希;根据树根哈希和更新后的终结状态数据根哈希生成第一区块的区块高度的状态根哈希;删除终结状态的各项第一状态数据。进一步,将终结状态的各项第一状态数据存储在若干节点的本地数据库中以供进行终结状态数据信息的查询。进一步,根据第一根哈希更新终结状态数据根哈希包括:获取第一区块的前一个区块高度的第二区块的终结状态根哈希、第一区块的第一根哈希;根据第二区块的终结状态根哈希和第一根哈希再次哈希以更新第一区块的终结状态根哈希。进一步,终结状态哈希值初始值为空。第二方面,本专利技术还提供另一种区块链状态数据存储方法,包括:在执行第一区块中的各交易后,分别判断待存储的各项第一状态数据为终结状态或非终结状态:根据终结状态的各项第一状态数据生成第二根哈希;将第二根哈希和非终结状态数据的各项第一状态数据哈希后存入状态树,并删除所述状态树中待存储的终结状态的各项第一状态数据对应的非终结状态数据;生成状态数的树根哈希;删除终结状态的各项第一状态数据。进一步,将终结状态的各项第一状态数据存储在若干节点的本地数据库中以供进行终结状态数据信息的查询。第三方面,本专利技术还提供一种设备,包括一个或多个处理器和存储器,其中存储器包含可由该一个或多个处理器执行的指令以使得该一个或多个处理器执行根据本专利技术各实施例提供的区块链状态数据存储方法。第四方面,本专利技术还提供一种存储有计算机程序的存储介质,该计算机程序使计算机执行根据本专利技术各实施例提供的区块链状态数据存储方法。本专利技术诸多实施例提供的区块链状态数据存储方法、设备和存储介质通过只将非终结状态数据存储到状态树,并获取状态树根,将终结状态数据生成第一根哈希,再将本区块的第一根哈希和上一区块的终结状态数据根哈希结合生成本区块更新后的状态数据根哈希,存储到区块头中,一方面将终结状态数据记录保留下来,保存了数据的完整性,另一方面,减少了状态数据的存储量,提高了后续存储效率,查询效率。本专利技术一些实施例提供的区块链状态数据存储方法、设备和存储介质进一步通过将终结状态的状态数据存储到若干节点中,当需要进行此类数据的查询时,可以通过该节点获取,保证了状态数据存储的前提下,减少状态数据的存储。本专利技术诸多实施例提供的区块链状态数据存储方法、设备和存储介质进一步通过将终结状态的数据生成的第二根哈希与非终结状态数据一同存储状态树中,同样的,也删除终结状态数据,一方面保证了状态数据的完整性,另一方面减少了状态数据的存储量,提高了后续存储、查询的效率。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1为本专利技术一实施例提供的一种区块链状态数据存储方法的流程图。图2为图1所示方法的一种优选实施方式的流程图。图3为本专利技术一实施例提供的另一种区块链状态数据存储方法的流程图图4为图3所示方法的一种优选实施方式的流程图。图5为本专利技术一实施例提供的一种设备的结构示意图。具体实施方式下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关专利技术,而非对该专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与专利技术相关的部分。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。区块链的状态数据分为终结状态和非终结状态:非终结状态:即可以再发生变化的状态,比如用户的账户余额,是可以变化的,再如用户发起一笔交易,该交易的状态为“发起交易”,这笔交易在没有人接单之前,可以被撤销,所以称为非终结状态。终结状态:即不能再发生变化的状态,比如上面所说的用户发起的一笔交易,在没有人接单之前,是非终结状态,当有人接单以后,交易执行完成,该交易状态则变为终结状态。图1为本专利技术一实施例提供的一种区块链状态数据存储方法的流程图。如图1所示,在本实施例中,本专利技术提供一种区块链状态数据存储方法,包括:S11、在执行第一区块中的各交易后,分别判断待存储的各项第一状态数据为终结状态或非终结状态:若第一状态数据为非终结状态,则将第一状态数据存入状态树;否则,则删除状态树中对应的非终结状态的状态数据;S12、生成状态树的树根哈希;S13、根据终结状态的各项第一状态数据生成第一根哈希,根据第一根哈希更新终结状态数据根哈希;S14、根据树根哈希和更新后的终结状态数据根哈希生成第一区块的区块高度的状态根哈希;删除终结状态的各项第一状态数据。具体地,执行第一区块的各交易后,生成了state1,state2,state3,state4等状态数据,其中state1,state2为非终结状态数据,判断上述状态数据哪些为非终结状态哪些为终结状态后,根据非终结状态数据state1,state2存入状态树,将终结状态的第一数据对应的该状态树中的原始状态(即非终结状态)的第一数据删除后以更新状态树((比如原本的状态树中的非终结状态为某一订单交易tx1,此时,tx1对应的状态数据为非终结状态,tx1的非终结状态数据存储在状态树中,而在本区块中,有人发送订单交易tx2接单,合约执行完该tx2后,tx1对应的数据状态由非终结状态改变为终结状态,因此要删除原本存储在状态树中的非终结状态数据),而对于新叶子节点只需要存入状态树即可),并获取状态树的树根哈希hash1,将终结状态数据state3哈希生成哈希值a,将终结状态数据state4哈希生成哈希值b,然后将a和b哈希生成c,同时获取上一个区块的终结状态的哈希值d,根据哈希值c和上一区块终结状态哈希值d生成第一区块的终结状态数据根哈希hash2=c+d,根据hash1和hash2生成第一区块的状态根哈希Hash=hash1+hash2,该根哈希Hash存储在区块头中,并将终结状态数据state3,state4删除。更多的,区块的终结状态数据根哈希hash2存储在数据库中,以备下一区块生成终结状态数据根哈希时获取上一区块的终结状态数据更哈希。在更多实施例中,步骤S12和步骤S13的执行顺序可以不受上述实施例的限制,即可以先执行步骤本文档来自技高网...

【技术保护点】
1.一种区块链状态数据存储方法,其特征在于,所述方法包括:在执行第一区块中的各交易后,分别判断待存储的各项第一状态数据为终结状态或非终结状态:若所述第一状态数据为非终结状态,则将所述第一状态数据存入状态树;否则,删除所述状态树中对应的非终结状态的状态数据;生成所述状态树的树根哈希;根据终结状态的各项第一状态数据生成第一根哈希,根据所述第一根哈希更新终结状态数据根哈希;根据所述树根哈希和更新后的终结状态数据根哈希生成所述第一区块的区块高度的状态根哈希;删除所述终结状态的各项第一状态数据。

【技术特征摘要】
1.一种区块链状态数据存储方法,其特征在于,所述方法包括:在执行第一区块中的各交易后,分别判断待存储的各项第一状态数据为终结状态或非终结状态:若所述第一状态数据为非终结状态,则将所述第一状态数据存入状态树;否则,删除所述状态树中对应的非终结状态的状态数据;生成所述状态树的树根哈希;根据终结状态的各项第一状态数据生成第一根哈希,根据所述第一根哈希更新终结状态数据根哈希;根据所述树根哈希和更新后的终结状态数据根哈希生成所述第一区块的区块高度的状态根哈希;删除所述终结状态的各项第一状态数据。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:将终结状态的各项第一状态数据存储在若干节点的本地数据库中以供进行终结状态数据信息的查询。3.根据权利要求2所述的方法,其特征在于,根据所述第一根哈希更新终结状态数据根哈希包括:获取第一区块的前一个区块高度的第二区块的终结状态根哈希、所述第一区块的所述第一根哈希;根据第二区块的终结状态根哈希和所述第一根哈希再次哈希以更新第...

【专利技术属性】
技术研发人员:林敬王志文吴思进
申请(专利权)人:杭州复杂美科技有限公司
类型:发明
国别省市:浙江,33

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

1