CN114064984A - 一种基于稀疏数组链表的世界状态增量更新方法及装置 - Google Patents
一种基于稀疏数组链表的世界状态增量更新方法及装置 Download PDFInfo
- Publication number
- CN114064984A CN114064984A CN202210045238.0A CN202210045238A CN114064984A CN 114064984 A CN114064984 A CN 114064984A CN 202210045238 A CN202210045238 A CN 202210045238A CN 114064984 A CN114064984 A CN 114064984A
- Authority
- CN
- China
- Prior art keywords
- hash
- array
- world state
- linked list
- array unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3827—Use of message hashing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3829—Payment protocols; Details thereof insuring higher security of transaction involving key management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于稀疏数组链表的世界状态增量更新方法及装置,该方法包括:世界状态树重建过程根据更新的键与哈希桶数量计算哈希桶位置索引,每个哈希桶均指向一个稀疏数组链表,通过遍历稀疏数组链表的数组单元头中的键范围,确定本次更新对应的数组单元,然后重算更新的数组单元的哈希,最后再通过遍历数组单元头的哈希,逐个异或运算得到哈希桶的哈希,再增量重建世界状态树的树部分,得到更新后的世界状态树的根哈希值。通过引入稀疏数组链表对世界状态的增量改变进行计算,特别是在大量碰撞数据的场景下,可以大大减小现有哈希桶重算哈希的开销。本发明公开的方法能够较大地提升世界状态重算效率,较好地提升区块链系统性能。
Description
技术领域
本发明属于区块链技术领域,尤其涉及一种基于稀疏数组链表的世界状态增量更新方法及装置。
背景技术
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,使得区块链技术已在众多的领域中广泛的进行应用。
区块链系统通常以块链的形式加以组织,区块中通常包括前序区块链完整系统状态,比如区块哈希,世界状态树根哈希,以及交易树哈希,回执树哈希等。在传统的哈希桶中,哈希桶所关联的数据槽以数组的形式组织,更新的数据只能够通过查找的方式找到对应位置再更新,在数据更新完成之后,需要更新整体哈希槽的哈希摘要,如果同一个哈希桶中的数据较多,计算量将增大,如果在同一轮修改过程当中有多个哈希桶存在更新,则涉及大量计算,效率低下。
发明内容
世界状态被组织成树形数据结构进行存储,区块链交易指令在区块链上被应用执行后,区块链的世界状态发生改变,需要更新世界状态的树形存储数据,本发明的目的在于针对现有技术的不足,提供一种高效的基于稀疏数组链表的世界状态增量更新方法及装置。
本发明的目的是通过以下技术方案实现的:
根据本说明书的第一方面,提供一种基于稀疏数组链表的世界状态增量更新方法,该方法包括:
S1:在单个区块中的所有交易指令执行过程中,将会对区块链上存储的世界状态数据进行增删改操作,所有交易指令执行完成之后,所有世界状态数据的变化将会被确定,并重新生成完整的世界状态树;
S2:世界状态树重建过程根据更新的键与哈希桶数量计算哈希桶位置索引,每个哈希桶均指向一个稀疏数组链表;所述稀疏数组链表由链表指针和至少一个数组单元组成,每个数组单元包括数组单元头和数组本体,所述数组单元头包括数组单元键范围和数组单元哈希值两个部分,所述数组本体包括至少一个数据槽存储键值对;
S3:通过遍历所述数组单元头中的键范围,确定本次更新对应的数组单元;
S4:将本次需要更新的数组单元的原始哈希值和键范围进行缓存;
S5:在本次需要更新的数组单元的数组本体中,确定需要更新的数据槽位置,修改或增删所述数据槽中的键值对数据;其中,可以采用二分查找法快速确定需要更新的数据槽位置;
S6:如果当前区块的交易执行达到确定状态,则开始重建世界状态树,从缓存中将所有涉及到更新的数组单元的哈希进行重算,重算可以采用传统的拼接计算方式,更新至其数组单元头中,并更新该数组单元头中的键范围;
S7.1:如果是首次建立世界状态树,则在计算单个哈希桶的哈希时,遍历当前哈希桶指向的稀疏数组链表中的所有数组单元,并通过异或运算所有的数组单元头中存储的哈希值得到桶哈希;
S7.2:如果不是首次建立世界状态树,则在计算单个哈希桶的哈希时,对缓存中所有数组单元的原始哈希值和更新后的哈希值,以及原桶哈希进行异或运算,得到新的桶哈希;
S8:完成涉及更新的哈希桶的桶哈希计算后,再增量重建世界状态树的树部分,得到更新后的世界状态树的根哈希值。
进一步地,区块链交易中的指令能够修改区块链的世界状态数据,世界状态数据以键值对的形式存储在数据库中;世界状态数据会被均匀散列在世界状态树的各个哈希桶所指向的稀疏数组链表的数组本体的若干数据槽中。
进一步地,所述数据库为键值数据库,例如基于LevelDB架构的数据库(LevelDB或 RocksDB)。
进一步地,该方法适用于符合可进行增量状态变化计算的以哈希桶组织散列的数据结构,如默克尔桶树、固定深度默克尔树等。
进一步地,各个区块链节点执行交易携带的智能合约指令,智能合约指令能够访问和操作世界状态数据。
进一步地,区块链上存储的世界状态数据分为内存状态和持久化状态,其中持久化状态将会在所有参与到该区块链的节点上存储;世界状态数据以键值对的形式存在。
进一步地,所述哈希桶数量是固定的,初始化完成之后就不再修改,一般为素数个数,可避免碰撞;在计算哈希桶位置索引时,键通常以定长64字节数组输入,需要先转换为4字节整数,可以采用Fowler-Noll-Vo算法进行转换,该算法可以将32 bytes数据散列到int32整数空间中;根据转化后得到的整数为输入键分配一个固定位置哈希桶;所述哈希桶由哈希桶头以及哈希桶体构成,所述哈希桶体即稀疏数组链表。
进一步地,每个稀疏数组链表中,可以通过数组单元头中存储的键范围快速确定对应键是否在本数组单元;每个数组单元内所有数据槽均以该数据槽中的键的字典序进行排序。
进一步地,所述缓存中存有涉及更新的数组单元的指针,以及该数组单元的原始哈希值、更新后的哈希值、更新后的键范围。如果交易指令为读取操作,则可先根据查询键从缓存中优先进行检索,获取前序交易更新后的数组单元,进一步得到更新后的数据值,该过程无需对稀疏数组链表从头进行遍历,加快检索速度。
进一步地,在数组单元内数据槽数量达到设定阈值后,将会采取分裂操作,分裂操作将会把原有的数组单元按照数据槽的设定阈值分裂为多个新的数组单元,并为新的数组单元根据其数据槽统计键范围并更新至数组单元头,按照键范围顺序串联形成新的稀疏数组链表,上述修改仅影响原数组单元的后驱数组单元。
进一步地,所述缓存为通用内存散列表或是专用键值内存存储。
进一步地,所述键值对中,键为当前数据槽中存储的数据的哈希值,值为当前数据槽中存储的数据。
根据本说明书的第二方面,提供一种基于稀疏数组链表的世界状态增量更新装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现如第一方面所述的基于稀疏数组链表的世界状态增量更新方法。
本发明的有益效果是:本发明通过引入稀疏数组链表对世界状态的增量改变进行计算,特别是在大量碰撞数据的场景下,可以大大减小现有哈希桶重算哈希的开销;本发明能够较大地提升世界状态重算效率,较好地提升区块链系统性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性实施例提供的默克尔哈希桶树的结构示意图;
图2是一示例性实施例提供的稀疏数组链表的数据结构示意图;
图3是图2实施例的更新操作示意图;
图4是一示例性实施例提供的一种基于稀疏数组链表的世界状态增量更新方法的流程图;
图5是一示例性实施例提供的数组单元分裂操作示意图;
图6是一示例性实施例提供的一种基于稀疏数组链表的世界状态增量更新装置的结构图。
具体实施方式
为了更好的理解本申请的技术方案,下面结合附图对本申请实施例进行详细描述。
应当明确,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
区块链通常以P2P的方式进行网络组织,在区块链数据组织层面,存在多种组织形式,比较常见的是账户加状态的组织形式,在一些区块链实施例中,也存在以未花费交易输出作为状态数据组织形式,本说明书针对账户加状态数据的形式组织的区块链加以限定。区块链系统通常以块链的形式加以组织,区块中通常包括前序区块链完整系统状态,比如区块哈希,世界状态树根哈希,以及交易树哈希,回执树哈希等。
在组织并存储账户状态数据如账户余额数据,账户中合约变量数据等状态型数据时,以键值对的形式存储特定的某个数据对象,并通过利用树形结构将所有的键值对进行关联。在特定实施例中,树形结构可以为默克尔树或默克尔帕特丽夏树,在本说明书阐述的实施例中,以默克尔桶树进行说明。为了实现增量的哈希计算,在默克尔桶树结构中,分为默克尔树部分和哈希桶部分,默克尔树部分主要用于在更新之后快速重建并生成默克尔树根,在哈希桶部分,则是用于作为散列表实现的一种方式,通过多个哈希桶来散列存储数据。在一些实施例中,哈希桶以数组配合链表的方式进行组织,在另一些实施例中,也存在基础散列表配合数组或链表的方式进行组织。
如图1所示,是一种典型的默克尔哈希桶树的结构示意图,整体结构由上层的默克尔树部分和下层的哈希桶散列部分组成,其哈希桶的数量在预先设定之后将不会发生变化。在修改数据的过程当中,需要先计算键所在的哈希桶位置索引,在得到桶位置索引之后,将对应的数据插入到对应哈希桶所关联的数据位置。在传统的哈希桶中,哈希桶所关联的数据槽以数组的形式组织,更新的数据只能够通过查找的方式找到对应位置再更新,在数据更新完成之后,需要更新整体哈希槽的哈希摘要,较多更新整体哈希摘要的方式是通过线性拼接实现的,如果同一个哈希桶中的数据较多,对线性拼接的计算量则增大。如果在同一轮修改过程当中有多个哈希桶存在更新,则涉及大量计算,效率低下。在一些更加精巧的设计当中,则去除了哈希桶的部分,整体都使用默克尔树以及其变体的数据结构如默克尔帕特丽夏树, 默克尔帕特丽夏树通过对数据前缀的压缩,避免了树层结构过于庞大,但是依旧存在树高度可能会不断增加的问题。因此不论是默克尔桶树还是默克尔哈希树,都是对不同场景的取舍设计。
本实施例针对默克尔桶树进行世界状态增量更新优化设计,主要是针对默克尔桶树的哈希桶部分,引入稀疏数组链表的数据结构。稀疏数组链表的数据结构如图2所示,由链表指针和至少一个数组单元组成,每个数组单元包括数组单元头和数组本体。数组单元头包括两个部分,第一部分为数组单元键范围,包括开始键和结束键,以闭开区间的形式,形如[0x001, 0x11f),主要标记当前数组单元包括的键数据范围,第二部分为当前数组单元的哈希值,用于加速哈希桶完整哈希的计算。数组本体存储键值对。
更为具体地,世界状态数据以键值对的形式存储在数据库中;世界状态数据会被均匀散列在世界状态树的各个哈希桶所指向的稀疏数组链表的数组本体的若干数据槽中。每个数组单元内所有数据槽均以该数据槽中的键的字典序进行排序。
在上述基础上,结合图4说明完整的基于稀疏数组链表的世界状态增量更新方法,该方法实施步骤如下:
S1,首先由区块链客户端发起区块链状态更新指令,通常以交易作为更新指令载体。交易将通过共识机制被打包到区块当中,并提交到区块链节点执行,在单个区块中的所有交易指令执行过程中,将会对区块链上存储的世界状态数据进行增删改操作,所有交易指令执行完成之后,所有世界状态数据的变化将会被确定,并重新生成完整的世界状态树。
S2,世界状态树重建过程根据更新的键与哈希桶数量计算哈希桶位置索引,每个哈希桶均指向一个稀疏数组链表。由于需要进行更新的键值对其键可转换为字节数组,并进行散列运算,因此通常使用FNV(Fowler-Noll-Vo)算法对键哈希进行散列转换,将其散列到固定的32位整数空间中;以键值对{"block_ts": "112"}为例,需要将键block_ts进行散列运算,并将其使用FNV算法映射到整数空间为-2083922956,再对其取绝对值,并与哈希桶数量进行模运算来确定实际数据需要更新的哈希桶所在位置。
S3,通过遍历数组单元头中的键范围,确定本次更新对应的数组单元。
S4,将本次需要更新的数组单元的原始哈希值和键范围缓存到已修改数组单元缓存中,该缓存为内存缓存,主要用于存储当前未提交并持久化的数组单元。
S5,在本次需要更新的数组单元的数组本体中,通过二分查找法快速确定需要更新的数据槽位置,修改或增删数据槽中的键值对数据,更新前和更新后的键值对状态分别如图2和图3所示。
需要进一步说明的是,如果当前数组单元操作为插入操作,恰好插入的数据为某个数组单元范围的右开区间,则以追加的方式将新的数据追加到当前数组单元,并更新当前数组单元的键范围右区间,如果当前数组单元的数据槽数量达到设定阈值,则进行分裂操作。
S6,如果当前区块的交易执行达到确定状态,例如当前区块所有交易执行完成或者单笔交易执行成功,则开始增量重建世界状态树,从已修改数组单元缓存中,将所有涉及到更新的数组单元的哈希进行重算,更新至其数组单元头中,并更新该数组单元头中的键范围。
S7.1,如果是首次建立世界状态树,则在计算单个哈希桶的哈希时,遍历当前哈希桶指向的稀疏数组链表中的所有数组单元,并通过异或XOR运算所有的数组单元头中存储的哈希值得到桶哈希;如图2所示,由于异或运算为高效算法,按位异或效率是较高的。
S7.2,如果不是首次建立世界状态树,则在计算单个哈希桶的哈希时,对已修改数组单元缓存中所有数组单元的原始哈希值和更新后的哈希值,以及原桶哈希进行异或XOR运算,得到新的桶哈希;对原有桶哈希进行异或运算,可以抵消上一次异或运算的影响,再次对新的桶哈希进行异或运算,可以高效地计算新的默克尔桶哈希。
S8,完成涉及更新的哈希桶的桶哈希计算后,再重建默克尔桶树的默克尔树部分,得到更新后的默克尔桶树的根哈希值,完成完整世界状态的更新。
针对稀疏数组链表的分裂问题,结合图5进行进一步说明,如果任由哈希桶的某个数组单元不断增加数据,则该数组单元则会退化为数组,因此需要对达到一定长度的数据单元进行分裂,由于是链表结构,单个数组单元的改变不会影响完整的稀疏数组链表的剩余部分,只需要对当前分裂的数组单元进行处理,并对该数组单元的后驱数组单元指针进行调整即可。
首先说明数组单元指针指向的是前序数组单元的单元头,而单元头和数据槽在物理上是连续存储的。在对某个特定数组单元进行分裂操作时,将该数组单元按照数据槽的设定阈值分裂为多个新的数组单元,并为新的数组单元根据其数据槽统计键范围并更新至数组单元头,按照键范围顺序串联形成新的稀疏数组链表。数组单元分裂之后,需要重新计算新的数组单元的哈希,对整体的哈希桶哈希进行更新。在哈希桶哈希更新之后,则需要重新计算整体默克尔树的树状态。
数组单元分裂是非必须的一个过程,但是合理的分裂可以大大提升稀疏数组链表计算增量哈希的效率,减少不必要的计算。
稀疏数组链表是对数组和树形数据结构的双向结合,一方面保留了数组数据结构的快速随机访问能力,另一方面又结合了增量哈希的计算能力,通过引入数组单元的设计减少全量哈希计算的次数。
在至少一个实施例中,已修改数组单元缓存中存有涉及更新的数组单元的指针,以及该数组单元的原始哈希值、更新后的哈希值、更新后的键范围。如果交易指令为读取操作,则可先根据查询键从缓存中优先进行检索,获取前序交易更新后的数组单元,进一步得到更新后的数据值,该过程无需对稀疏数组链表从头进行遍历,加快检索速度。
与前述基于稀疏数组链表的世界状态增量更新方法的实施例相对应,本发明还提供了基于稀疏数组链表的世界状态增量更新装置的实施例。
参见图6,本发明实施例提供的一种基于稀疏数组链表的世界状态增量更新装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现上述实施例中的基于稀疏数组链表的世界状态增量更新方法。
本发明基于稀疏数组链表的世界状态增量更新装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图6所示,为本发明基于稀疏数组链表的世界状态增量更新装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的基于稀疏数组链表的世界状态增量更新方法。
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、SD卡、闪存卡(Flash Card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (10)
1.一种基于稀疏数组链表的世界状态增量更新方法,其特征在于,所述方法包括:
世界状态树重建过程根据更新的键与哈希桶数量计算哈希桶位置索引,每个哈希桶均指向一个稀疏数组链表;所述稀疏数组链表由链表指针和至少一个数组单元组成,所述数组单元包括数组单元头和数组本体,所述数组单元头包括数组单元键范围和数组单元哈希值,所述数组本体包括至少一个数据槽存储键值对;
通过遍历所述数组单元头中的键范围,确定本次更新对应的数组单元;
将本次需要更新的数组单元的原始哈希值和键范围进行缓存;
在本次需要更新的数组单元的数组本体中,确定需要更新的数据槽位置,修改或增删所述数据槽中的键值对数据;
如果当前区块的交易执行达到确定状态,则开始重建世界状态树,从缓存中将所有涉及到更新的数组单元的哈希进行重算,更新至数组单元头中,并更新该数组单元头中的键范围;
如果是首次建立世界状态树,在计算单个哈希桶的哈希时,遍历当前哈希桶指向的稀疏数组链表中的所有数组单元,并通过异或运算所有的数组单元头中存储的哈希值得到桶哈希;
如果不是首次建立世界状态树,在计算单个哈希桶的哈希时,对缓存中所有数组单元的原始哈希值和更新后的哈希值,以及原桶哈希进行异或运算,得到新的桶哈希;
完成涉及更新的哈希桶的桶哈希计算后,再增量重建世界状态树的树部分,得到更新后的世界状态树的根哈希值。
2.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,区块链交易中的指令能够修改区块链的世界状态数据,世界状态数据以键值对的形式存储在数据库中;世界状态数据会被均匀散列在世界状态树的各个哈希桶所指向的稀疏数组链表的数组本体的若干数据槽中。
3.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,该方法适用于符合能够进行增量状态变化计算的以哈希桶组织散列的数据结构,包括默克尔桶树、固定深度默克尔树。
4.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,各个区块链节点执行交易携带的智能合约指令,智能合约指令能够访问和操作世界状态数据。
5.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,区块链上存储的世界状态数据分为内存状态和持久化状态,其中持久化状态将会在所有参与到该区块链的节点上存储,世界状态数据以键值对的形式存在。
6.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,所述哈希桶数量固定,在计算哈希桶位置索引时,键以定长字节数组输入,之后转换为定长字节整数后,根据该整数为输入键分配一个固定位置哈希桶。
7.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,每个稀疏数组链表中,能够通过数组单元头中存储的键范围快速确定对应键是否在本数组单元;每个数组单元内所有数据槽均以数据槽中的键的字典序进行排序。
8.根据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,所述缓存中存有涉及更新的数组单元的指针,以及该数组单元的原始哈希值、更新后的哈希值、更新后的键范围;如果交易指令为读取操作,则根据查询键从缓存中优先进行检索,获取前序交易更新后的数组单元,得到更新后的数据值。
9.据权利要求1所述的基于稀疏数组链表的世界状态增量更新方法,其特征在于,在数组单元内数据槽数量达到设定阈值后采取分裂操作,将原有的数组单元按照数据槽的设定阈值分裂为多个新的数组单元,并为新的数组单元根据其数据槽统计键范围并更新至数组单元头,按照键范围顺序串联形成新的稀疏数组链表。
10.一种基于稀疏数组链表的世界状态增量更新装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,其特征在于,所述处理器执行所述可执行代码时,用于实现如权利要求1-9中任一项所述的基于稀疏数组链表的世界状态增量更新方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210045238.0A CN114064984B (zh) | 2022-01-14 | 2022-01-14 | 一种基于稀疏数组链表的世界状态增量更新方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210045238.0A CN114064984B (zh) | 2022-01-14 | 2022-01-14 | 一种基于稀疏数组链表的世界状态增量更新方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114064984A true CN114064984A (zh) | 2022-02-18 |
CN114064984B CN114064984B (zh) | 2022-05-24 |
Family
ID=80230941
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210045238.0A Active CN114064984B (zh) | 2022-01-14 | 2022-01-14 | 一种基于稀疏数组链表的世界状态增量更新方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114064984B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114218232A (zh) * | 2022-02-21 | 2022-03-22 | 浙商银行股份有限公司 | 一种基于增量桶的世界状态分片存储方法及装置 |
CN114943021A (zh) * | 2022-07-20 | 2022-08-26 | 之江实验室 | 一种tb级增量数据筛选方法和装置 |
WO2023160040A1 (zh) * | 2022-02-24 | 2023-08-31 | 腾讯科技(深圳)有限公司 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578131B1 (en) * | 1999-04-27 | 2003-06-10 | Microsoft Corporation | Scaleable hash table for shared-memory multiprocessor system |
US7370054B1 (en) * | 2003-09-29 | 2008-05-06 | Sun Microsystems, Inc | Method and apparatus for indexing a hash table which is organized as a linked list |
CN109766341A (zh) * | 2018-12-27 | 2019-05-17 | 厦门市美亚柏科信息股份有限公司 | 一种建立哈希映射的方法、装置、存储介质 |
CN110069496A (zh) * | 2019-03-20 | 2019-07-30 | 韶关学院 | 一种新型链式哈希表构建方法及装置 |
CN110555770A (zh) * | 2019-08-21 | 2019-12-10 | 杭州趣链科技有限公司 | 一种基于增量哈希的区块链世界状态校验和恢复方法 |
CN110727675A (zh) * | 2018-07-17 | 2020-01-24 | 阿里巴巴集团控股有限公司 | 一种链表的处理方法及装置 |
CN111488393A (zh) * | 2019-01-25 | 2020-08-04 | 国际商业机器公司 | 虚拟区块链 |
CN112286939A (zh) * | 2020-06-12 | 2021-01-29 | 支付宝(杭州)信息技术有限公司 | 块链式账本中全局状态的哈希的生成方法、装置及设备 |
CN113254450A (zh) * | 2021-05-28 | 2021-08-13 | 山大地纬软件股份有限公司 | 一种基于区块链的增量mpt树账户状态存储方法及系统 |
-
2022
- 2022-01-14 CN CN202210045238.0A patent/CN114064984B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578131B1 (en) * | 1999-04-27 | 2003-06-10 | Microsoft Corporation | Scaleable hash table for shared-memory multiprocessor system |
US7370054B1 (en) * | 2003-09-29 | 2008-05-06 | Sun Microsystems, Inc | Method and apparatus for indexing a hash table which is organized as a linked list |
CN110727675A (zh) * | 2018-07-17 | 2020-01-24 | 阿里巴巴集团控股有限公司 | 一种链表的处理方法及装置 |
CN109766341A (zh) * | 2018-12-27 | 2019-05-17 | 厦门市美亚柏科信息股份有限公司 | 一种建立哈希映射的方法、装置、存储介质 |
CN111488393A (zh) * | 2019-01-25 | 2020-08-04 | 国际商业机器公司 | 虚拟区块链 |
CN110069496A (zh) * | 2019-03-20 | 2019-07-30 | 韶关学院 | 一种新型链式哈希表构建方法及装置 |
CN110555770A (zh) * | 2019-08-21 | 2019-12-10 | 杭州趣链科技有限公司 | 一种基于增量哈希的区块链世界状态校验和恢复方法 |
CN112286939A (zh) * | 2020-06-12 | 2021-01-29 | 支付宝(杭州)信息技术有限公司 | 块链式账本中全局状态的哈希的生成方法、装置及设备 |
CN113254450A (zh) * | 2021-05-28 | 2021-08-13 | 山大地纬软件股份有限公司 | 一种基于区块链的增量mpt树账户状态存储方法及系统 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114218232A (zh) * | 2022-02-21 | 2022-03-22 | 浙商银行股份有限公司 | 一种基于增量桶的世界状态分片存储方法及装置 |
CN114218232B (zh) * | 2022-02-21 | 2022-05-24 | 浙商银行股份有限公司 | 一种基于增量桶的世界状态分片存储方法及装置 |
WO2023160040A1 (zh) * | 2022-02-24 | 2023-08-31 | 腾讯科技(深圳)有限公司 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
CN114943021A (zh) * | 2022-07-20 | 2022-08-26 | 之江实验室 | 一种tb级增量数据筛选方法和装置 |
CN114943021B (zh) * | 2022-07-20 | 2022-11-08 | 之江实验室 | 一种tb级增量数据筛选方法和装置 |
US11789639B1 (en) | 2022-07-20 | 2023-10-17 | Zhejiang Lab | Method and apparatus for screening TB-scale incremental data |
Also Published As
Publication number | Publication date |
---|---|
CN114064984B (zh) | 2022-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114064984B (zh) | 一种基于稀疏数组链表的世界状态增量更新方法及装置 | |
CN110471795B (zh) | 区块链状态数据恢复方法及装置、电子设备 | |
CN110457319B (zh) | 区块链状态数据存储方法及装置、电子设备 | |
CN110334154B (zh) | 基于区块链的分级存储方法及装置、电子设备 | |
CN110083601B (zh) | 面向键值存储系统的索引树构建方法及系统 | |
Leis et al. | The adaptive radix tree: ARTful indexing for main-memory databases | |
CN105117415B (zh) | 一种优化的ssd数据更新方法 | |
CN110347684B (zh) | 基于区块链的分级存储方法及装置、电子设备 | |
Raman | Priority queues: Small, monotone and trans-dichotomous | |
JP2957703B2 (ja) | データを記憶し検索する方法及びメモリ構成体 | |
Ahn et al. | ForestDB: A fast key-value storage system for variable-length string keys | |
EP3435256B1 (en) | Optimal sort key compression and index rebuilding | |
CN102831222A (zh) | 一种基于重复数据删除的差量压缩方法 | |
CN112000846B (zh) | 基于gpu分组lsm树索引的方法 | |
CN110599169A (zh) | 数据处理方法、装置、终端及介质 | |
Kostamis et al. | Exploring ethereum's data stores: A cost and performance comparison | |
CN114490060A (zh) | 内存分配方法、装置、计算机设备和计算机可读存储介质 | |
CN114706848A (zh) | 区块链数据存储、更新、读取方法及装置、电子设备 | |
Acar et al. | Parallel batch-dynamic trees via change propagation | |
CN110020272A (zh) | 缓存方法、装置以及计算机存储介质 | |
CN110532284B (zh) | 海量数据存储和检索方法、装置、计算机设备及存储介质 | |
CN111625198A (zh) | 一种元数据缓存方法和元数据缓存装置 | |
CN109241058A (zh) | 一种向b+树批量插入键值对的方法和装置 | |
US20080306948A1 (en) | String and binary data sorting | |
Bercea et al. | An extendable data structure for incremental stable perfect hashing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220606 Address after: No. 1788, Hongning Road, Xiaoshan District, Hangzhou, Zhejiang 311200 Patentee after: CHINA ZHESHANG BANK Co.,Ltd. Patentee after: Yiqiyin (Hangzhou) Technology Co., Ltd Address before: No. 1788, Hongning Road, Xiaoshan District, Hangzhou, Zhejiang 311200 Patentee before: CHINA ZHESHANG BANK Co.,Ltd. |
|
TR01 | Transfer of patent right |