一种基于稀疏数组链表的世界状态增量更新方法及装置制造方法及图纸

技术编号:32349368 阅读:17 留言:0更新日期:2022-02-20 02:13
本发明专利技术公开了一种基于稀疏数组链表的世界状态增量更新方法及装置,该方法包括:世界状态树重建过程根据更新的键与哈希桶数量计算哈希桶位置索引,每个哈希桶均指向一个稀疏数组链表,通过遍历稀疏数组链表的数组单元头中的键范围,确定本次更新对应的数组单元,然后重算更新的数组单元的哈希,最后再通过遍历数组单元头的哈希,逐个异或运算得到哈希桶的哈希,再增量重建世界状态树的树部分,得到更新后的世界状态树的根哈希值。通过引入稀疏数组链表对世界状态的增量改变进行计算,特别是在大量碰撞数据的场景下,可以大大减小现有哈希桶重算哈希的开销。本发明专利技术公开的方法能够较大地提升世界状态重算效率,较好地提升区块链系统性能。系统性能。系统性能。

【技术实现步骤摘要】
一种基于稀疏数组链表的世界状态增量更新方法及装置


[0001]本专利技术属于区块链
,尤其涉及一种基于稀疏数组链表的世界状态增量更新方法及装置。

技术介绍

[0002]区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,使得区块链技术已在众多的领域中广泛的进行应用。
[0003]区块链系统通常以块链的形式加以组织,区块中通常包括前序区块链完整系统状态,比如区块哈希,世界状态树根哈希,以及交易树哈希,回执树哈希等。在传统的哈希桶中,哈希桶所关联的数据槽以数组的形式组织,更新的数据只能够通过查找的方式找到对应位置再更新,在数据更新完成之后,需要更新整体哈希槽的哈希摘要,如果同一个哈希桶中的数据较多,计算量将增大,如果在同一轮修改过程当中有多个哈希桶存在更新,则涉及大量计算,效率低下。

技术实现思路

[0004]世界状态被组织成树形数据结构进行存储,区块链交易指令在区块链上被应用执行后,区块链的世界状态发生改变,需要更新世界状态的树形存储数据,本专利技术的目的在于针对现有技术的不足,提供一种高效的基于稀疏数组链表的世界状态增量更新方法及装置。
[0005]本专利技术的目的是通过以下技术方案实现的:根据本说明书的第一方面,提供一种基于稀疏数组链表的世界状态增量更新方法,该方法包括:S1:在单个区块中的所有交易指令执行过程中,将会对区块链上存储的世界状态数据进行增删改操作,所有交易指令执行完成之后,所有世界状态数据的变化将会被确定,并重新生成完整的世界状态树;S2:世界状态树重建过程根据更新的键与哈希桶数量计算哈希桶位置索引,每个哈希桶均指向一个稀疏数组链表;所述稀疏数组链表由链表指针和至少一个数组单元组成,每个数组单元包括数组单元头和数组本体,所述数组单元头包括数组单元键范围和数组单元哈希值两个部分,所述数组本体包括至少一个数据槽存储键值对;S3:通过遍历所述数组单元头中的键范围,确定本次更新对应的数组单元;S4:将本次需要更新的数组单元的原始哈希值和键范围进行缓存;S5:在本次需要更新的数组单元的数组本体中,确定需要更新的数据槽位置,修改或增删所述数据槽中的键值对数据;其中,可以采用二分查找法快速确定需要更新的数据槽位置;
S6:如果当前区块的交易执行达到确定状态,则开始重建世界状态树,从缓存中将所有涉及到更新的数组单元的哈希进行重算,重算可以采用传统的拼接计算方式,更新至其数组单元头中,并更新该数组单元头中的键范围;S7.1:如果是首次建立世界状态树,则在计算单个哈希桶的哈希时,遍历当前哈希桶指向的稀疏数组链表中的所有数组单元,并通过异或运算所有的数组单元头中存储的哈希值得到桶哈希;S7.2:如果不是首次建立世界状态树,则在计算单个哈希桶的哈希时,对缓存中所有数组单元的原始哈希值和更新后的哈希值,以及原桶哈希进行异或运算,得到新的桶哈希;S8:完成涉及更新的哈希桶的桶哈希计算后,再增量重建世界状态树的树部分,得到更新后的世界状态树的根哈希值。
[0006]进一步地,区块链交易中的指令能够修改区块链的世界状态数据,世界状态数据以键值对的形式存储在数据库中;世界状态数据会被均匀散列在世界状态树的各个哈希桶所指向的稀疏数组链表的数组本体的若干数据槽中。
[0007]进一步地,所述数据库为键值数据库,例如基于LevelDB架构的数据库(LevelDB 或 RocksDB)。
[0008]进一步地,该方法适用于符合可进行增量状态变化计算的以哈希桶组织散列的数据结构,如默克尔桶树、固定深度默克尔树等。
[0009]进一步地,各个区块链节点执行交易携带的智能合约指令,智能合约指令能够访问和操作世界状态数据。
[0010]进一步地,区块链上存储的世界状态数据分为内存状态和持久化状态,其中持久化状态将会在所有参与到该区块链的节点上存储;世界状态数据以键值对的形式存在。
[0011]进一步地,所述哈希桶数量是固定的,初始化完成之后就不再修改,一般为素数个数,可避免碰撞;在计算哈希桶位置索引时,键通常以定长64字节数组输入,需要先转换为4字节整数,可以采用Fowler

Noll

Vo算法进行转换,该算法可以将32 bytes数据散列到int32整数空间中;根据转化后得到的整数为输入键分配一个固定位置哈希桶;所述哈希桶由哈希桶头以及哈希桶体构成,所述哈希桶体即稀疏数组链表。
[0012]进一步地,每个稀疏数组链表中,可以通过数组单元头中存储的键范围快速确定对应键是否在本数组单元;每个数组单元内所有数据槽均以该数据槽中的键的字典序进行排序。
[0013]进一步地,所述缓存中存有涉及更新的数组单元的指针,以及该数组单元的原始哈希值、更新后的哈希值、更新后的键范围。如果交易指令为读取操作,则可先根据查询键从缓存中优先进行检索,获取前序交易更新后的数组单元,进一步得到更新后的数据值,该过程无需对稀疏数组链表从头进行遍历,加快检索速度。
[0014]进一步地,在数组单元内数据槽数量达到设定阈值后,将会采取分裂操作,分裂操作将会把原有的数组单元按照数据槽的设定阈值分裂为多个新的数组单元,并为新的数组单元根据其数据槽统计键范围并更新至数组单元头,按照键范围顺序串联形成新的稀疏数组链表,上述修改仅影响原数组单元的后驱数组单元。
[0015]进一步地,所述缓存为通用内存散列表或是专用键值内存存储。
[0016]进一步地,所述键值对中,键为当前数据槽中存储的数据的哈希值,值为当前数据槽中存储的数据。
[0017]根据本说明书的第二方面,提供一种基于稀疏数组链表的世界状态增量更新装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现如第一方面所述的基于稀疏数组链表的世界状态增量更新方法。
[0018]本专利技术的有益效果是:本专利技术通过引入稀疏数组链表对世界状态的增量改变进行计算,特别是在大量碰撞数据的场景下,可以大大减小现有哈希桶重算哈希的开销;本专利技术能够较大地提升世界状态重算效率,较好地提升区块链系统性能。
附图说明
[0019]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0020]图1是一示例性实施例提供的默克尔哈希桶树的结构示意图;图2是一示例性实施例提供的稀疏数组链表的数据结构示意图;图3是图2实施例的更新操作示意图;图4是一示例性实施例提供的一种基于稀疏数组链表的世界状态增量更新方法的流程图;图5是一示例性实施例提供的数组单元分裂操作示意图;图6是一示例性实施本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于稀疏数组链表的世界状态增量更新方法,其特征在于,所述方法包括:世界状态树重建过程根据更新的键与哈希桶数量计算哈希桶位置索引,每个哈希桶均指向一个稀疏数组链表;所述稀疏数组链表由链表指针和至少一个数组单元组成,所述数组单元包括数组单元头和数组本体,所述数组单元头包括数组单元键范围和数组单元哈希值,所述数组本体包括至少一个数据槽存储键值对;通过遍历所述数组单元头中的键范围,确定本次更新对应的数组单元;将本次需要更新的数组单元的原始哈希值和键范围进行缓存;在本次需要更新的数组单元的数组本体中,确定需要更新的数据槽位置,修改或增删所述数据槽中的键值对数据;如果当前区块的交易执行达到确定状态,则开始重建世界状态树,从缓存中将所有涉及到更新的数组单元的哈希进行重算,更新至数组单元头中,并更新该数组单元头中的键范围;如果是首次建立世界状态树,在计算单个哈希桶的哈希时,遍历当前哈希桶指向的稀疏数组链表中的所有数组单元,并通过异或运算所有的数组单元头中存储的哈希值得到桶哈希;如果不是首次建立世界状态树,在计算单个哈希桶的哈希时,对缓存中所有数组单元的原始哈希值和更新后的哈希值,以及原桶哈希进行异或运算,得到新的桶哈希;完成涉及更新的哈希桶的桶哈希计算后,再增量重建世界状态树的树部分,得到更新后的世界状态树的根哈希值。2.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,区块链交易中的指令能够修改区块链的世界状态数据,世界状态数据以键值对的形式存储在数据库中;世界状态数据会被均匀散列在世界状态树的各个哈希桶所指向的稀疏数组链表的数组本体的若干数据槽中。3.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,该方法适用于符合能够进行增量状态变化计算的以哈希桶组织散列的数据结构,包括默克尔桶树、固定深度默克尔树。4.根据权利要求1所述的基于稀疏数组链表的...

【专利技术属性】
技术研发人员:陈权臧铖陈嘉俊
申请(专利权)人:浙商银行股份有限公司
类型:发明
国别省市:

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

1