CN114020737A - 一种区块链数据高效可信索引方法 - Google Patents
一种区块链数据高效可信索引方法 Download PDFInfo
- Publication number
- CN114020737A CN114020737A CN202111222418.3A CN202111222418A CN114020737A CN 114020737 A CN114020737 A CN 114020737A CN 202111222418 A CN202111222418 A CN 202111222418A CN 114020737 A CN114020737 A CN 114020737A
- Authority
- CN
- China
- Prior art keywords
- data
- block
- key
- verification
- node
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000012795 verification Methods 0.000 claims description 80
- 238000010276 construction Methods 0.000 claims description 11
- 239000002243 precursor Substances 0.000 claims description 10
- 238000004806 packaging method and process Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 239000004816 latex Substances 0.000 description 1
- 229920000126 latex Polymers 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种区块链数据高效可信索引方法,针对目前区块链上基于关键字索引方法中难以避免遍历区块所带来的检索效率低下,查询可信性不足等问题,基于以太坊状态树思想构建块内索引TMPT(Transaction‑Merkle Patricia Trie)及全局区块索引KMPT(Key‑Merkle Patricia Trie),实现检索一次定位目标块,避免了关键字检索中遍历区块的过程,极大提升了检索的效率。此外,基于本发明索引模型,可同时为查询提供数据存在和不存在性证明,使轻量级节点可自身验证各种情况下查询结果的正确性,提升了查询的可信性。
Description
技术领域
本发明涉及区块链数据查询技术领域,尤其涉及在区块链数据库上针对关键字(Key)的高效可信索引方法。
背景技术
随着比特币,以太币等加密货币的兴起,其底层区块链技术得到了越来越多的关注。区块链技术是运用加密算法、共识机制等技术的分布式存储账本。区块链是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。区块链以其去中心化,不可篡改,多方共享以及可回溯特性为解决数据可信存储问题提供了新的可能。随着区块链技术的运用,越来越多的互联网数据会存储在区块链上。
在区块链中,共识算法负责数据的写入,在如何提升共识算法效率方面,目前已有很多研究并且取得了不错的成效,但在对区块链数据库的读取性能,即查询处理方面的研究相对较少。现有的区块链系统在数据查询处理方面仍暴露出很大的局限性,如比特币系统中仅支持根据交易哈希值查询具体交易,而无法针对交易的具体细节展开查询;以太坊支持账户查询,由于其引入了状态树维护全局账户状态,可根据账户地址对账户状态进行高效的查询,但状态树本身与交易并无关联,查询交易数据仍需通过交易哈希值进行查询。
为实现在区块链数据库中针对数据具体内容的查询,如关键字(Key)查询,许多研究者采用内置索引方法,在原有区块链数据结构上进行修改,普遍将二叉搜索树与Merkle树结合设计块内索引结构,以实现针对关键字(Key)的检索。但这类工作仅构建了块内索引,属于一种局部索引结构,由于无法确定目标数据所在的区块,导致在检索目标关键字(Key)数据时须依次遍历区块进行,这产生了大量在无关区块中的无效搜索过程,大大限制了检索的效率。此外,现有方法仅在数据存在的情况下为查询结果提供数据存在性证明,当数据不存在时区块链节点不能根据收到的查询结果自身验证其是否真实存在,无法为查询提供数据不存在证明,因此查询可信性不足。
发明内容
本发明要解决的技术问题是针对上述现有技术的不足,在保证索引不可篡改的前提下,提出一种基于以太坊状态树,针对关键字(Key)的全局区块索引(英文简写KMPT,Key-Merkle Patricia Trie)结构,可一次定位目标区块,避免遍历区块的检索过程,提高检索效率,同时结合块内索引(英文简写TMPT,Transaction-Merkle Patricia Trie)结构,实现针对关键字(Key)的高效区块链数据检索。此外,基于该索引模型,可同时提供查询数据存在或不存在证明,提升了查询结果的可信性。
为解决上述技术问题,本发明所采取的技术方案是:
一种区块链数据高效可信索引方法,包括以下步骤:
步骤一:区块链网络中的普通节点产生由关键字(Key)标识的数据记录;
步骤二:区块链网络中的存储节点收集一段时间内网络中所述普通节点产生的由关键字(Key)标识的所述数据记录,验证数据后将其打包成区块,形成新区块,并将所述新区块广播给全网存储节点进行共识验证;
步骤三:各存储节点根据共识验证通过后的所述新区块更新索引,并将所述新区块存储;
步骤四:根据关键字(Key)查询区块链中存储的关键字(Key)标识的所述数据记录,若记录存在,则返回最新版本关键字(Key)数据记录具体目标数据(Data)及存在性验证路径(path);若记录不存在,则返回Null(不存在)及不存在验证路径;
步骤五:普通用户节点收到查询结果后进行可信验证。
进一步的,所述步骤一具体包括:
1-1:生成默认信息,包括数据生成时间戳(Time),数据所有者的ScriptPubK(数据所有者公钥)等权限信息;
1-2:关键字(Key)标识的数据记录包括Key值(关键字值),指定所述数据记录标识的Key值(关键字值)及其数据前驱(PreHash),若该所述关键字(Key)是第一次出现,则数据前驱(PreHash)为Null(不存在),否则数据前驱(PreHash)为该关键字(Key)所对应的最新版本记录哈希值;
1-3:指定所述数据记录各字段(Field)具体内容;
1-4:所述普通节点将生成的所述数据记录用私钥签名为ScriptSig(私钥名称)后发布到所述区块链网络中。
进一步的,所述步骤二具体包括:
2-1:存储节点收集一段时间内所述区块链网络中由所述普通节点产生的关键字(Key)标识的数据记录;
2-2:所述存储节点对收集的所述关键字(Key)标识的所述数据记录进行验证,包括权限验证和正确性验证,所述权限验证检查数据记录中所述数据所有者的ScriptPubK(数据所有者公钥)与ScriptSig(私钥名称)是否匹配,权限匹配则通过,权限不匹配则不通过;所述正确性验证检查数据前驱(PreHash)中指向的所述关键字(Key)标识的所述数据记录是否存在,且两者Key值(关键字值)是否相同,所述权限验证和正确性验证中有任意一项不通过,则必须将该条数据记录丢弃;
2-3:将验证通过后的关键字(Key)标识的所述数据记录集合打包进区块,形成新区块,并将新区块广播给全网存储节点进行共识验证。
进一步的,所述步骤三具体包括:具体包括:
3-1:各存储节点为共识验证通过后的有效的所述新区块构建块内索引(TMPT),构建规则与以太坊交易树相同,均为MPT结构,不同的是这里以数据记录的Key值(关键字值)为关键字(Key)构建块内索引(TMPT),而不是交易序号,最后将最新的块内索引根节点(TMPTRoot)添加到区块头中完成块内索引(TMPT)构建;
3-2:以数据记录的Key值(关键字值)为关键字进行全局区块索引(KMPT)更新,更新规则与以太坊状态树相同,均以区块为单位采用新建分支方式进行以节省存储空间,首先由每个Key值(关键字值)在当前最新的所述全局区块索引(KMPT)树中锁定目标叶节点,并将所述叶节点中最后的块内索引根节点(LatestTMPTRoot)域设置为新区块中的块内索引根节点(TMPTRoot),即完成指向目标区块的索引,最后将构建完成后的全局区块索引根节点(KMPTRoot)添加到所述新区块头中完成所述全局区块索引(KMPT)更新,所述叶节点为全局区块索引(KMPT)树中最底层的节点,存储具体索引信息;
3-3:将所述新区块存储。
进一步的,所述步骤四具体包括:
4-1:从所述新区块中获取到当前最新的全局区块索引根节点(KMPTRoot),沿所述全局区块索引根节点(KMPTRoot)以Key值(关键字值)为关键字检索,检索过程中将检索路径保存,若目标叶节点不存在,则返回Null(不存在)及在全局区块索引(KMPT)树中的检索路径,表示不存在证明路径并结束检索过程;若目标叶节点存在,则从所述叶节点中获取到该关键字(Key)记录最新版本所在区块中的块内索引根节点(TMPTRoot)值,同时将此时全局区块索引(KMPT)检索路径清空;
4-2:沿所述4-1中获取到的块内索引根节点(TMPTRoot)值开始,以Key值(关键字值)为关键字对目标区块进行区块内检索,并将区块内检索路径保存于path(路径信息)中用于数据存在性证明,最后检索到目标数据哈希值;
4-3:根据目标数据哈希值到K-V数据库中取出目标数据(Data)的具体信息,将其与4-2中得到的区块内检索路径保存的path(路径信息)一起返回。
进一步的,所述步骤五具体包括:
5-1:首先判断收到的查询结果类型,若所述目标数据(Data)存在,则为查询存在类型,若为Null(不存在),则为查询不存在类型;
5-2:若为查询不存在类型,则进行数据不存在验证,根据返回的不存在证明路径,从全局区块索引根节点(KMPTRoot)开始,首先计算所述全局区块索引根节点(KMPTRoot)的哈希值并与最新区块头中全局区块索引根节点(KMPTRoot)比较是否一致,一致则依次向下进行验证,主要验证查询目标Key值(关键字值)与该路径上节点前缀值是否匹配,路径上各节点对应哈希值是否正确,最后验证路径末节点中与目标关键字(Key)匹配的指向叶节点的域值是否为空,以上条件均验证通过则证明该全局区块索引(KMPT)检索分支有效,查询目标关键字(Key)所对应数据确实不存在,完成不存在证明过程;
5-3:若为查询存在类型,则进行数据存在性验证,验证方法与Merkle证明相同,根据返回的存在证明路径,自底向上依次计算各节点哈希值,最后计算出一个根哈希值,将此根哈希值与目标区块中块内索引根节点(TMPTRoot)比较,一致则验证通过,证明目标关键字(Key)所对应的目标数据(Data)确实存在,完成数据存在性证明过程,所述根哈希值由各个节点哈希值计算得出。
本发明的有益效果是:
(1)本发明提供了一种区块链数据高效可信索引方法,在针对区块链数据关键字检索的过程中,可以实现检索一次定位目标区块的功能,避免了遍历区块检索目标数据的过程,大大提升了检索的效率。
(2)基于本发明索引模型,可为查询同时提供数据存在和不存在证明,弥补了数据不存在时由查询结果无法验证的缺点,使查询发起节点可自身验证各种情况下查询结果的真实性,提升了查询可信性。
附图说明
为了更好地表达本发明的技术方案,下面将对本发明的进行附图说明:
图1为本发明实施例一提供的数据记录结构图;
图2为本发明实施例一提供的索引模型结构图;
图3为本发明实施例一提供的检索流程图;
图4为本发明实施例一提供的可信验证流程图;
图5为本发明实施例二提供的数据例图;
图6为本发明实施例二提供的数据构建块内索引图;
图7为本发明实施例二提供的K-V数据库图;
图8为本发明实施例二提供的全局区块索引图。
具体实施方式
下面参照附图来描述本发明的优选实施方式。本领域技术人员应当理解的是,这些实施方式仅仅用于解释本发明的技术原理,并非在限制本发明的保护范围。
需要说明的是,在本发明的描述中,术语“上”、“下”、“左”、“右”、“内”、“外”等指示的方向或位置关系的术语是基于附图所示的方向或位置关系,这仅仅是为了便于描述,而不是指示或暗示所述装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,还需要说明的是,在本发明的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可根据具体情况理解上述术语在本发明中的具体含义。
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本发明中没有查询准确度概念,可信性是描述节点能否根据收到的查询结果自身验证其是否真实存在。可信性指查询发起节点(如轻节点),收到查询执行节点(如全节点)返回的查询结果后,可自身验证查询结果是否正确,即查询数据是否存在于区块链账本中。
实施例一见图1-4,针对已有区块链数据关键字检索方法中无法避免遍历区块造成的检索效率低下,查询结果可信性不足等问题,本发明提供一种区块链数据高效可信索引方法,具体步骤如下所述。
步骤一:区块链网络中的普通节点产生由关键字(Key)标识的数据记录,数据记录格式如图1所示,具体包括:
1-1:生成默认信息,包括数据生成时间戳(Time),数据所有者的ScriptPubK(数据所有者公钥)等权限信息;
1-2:关键字(Key)标识的数据记录包括Key值(关键字值),指定所述数据记录标识的Key值(关键字值)及其数据前驱(PreHash),若该所述关键字(Key)是第一次出现,则数据前驱(PreHash)为Null(不存在),否则数据前驱(PreHash)为该关键字(Key)所对应的最新版本记录哈希值;
1-3:指定数据记录各字段(Field1,Field2,……)具体内容;
1-4:普通节点将生成的所述数据记录用私钥签名为ScriptSig(私钥名称)后发布到区块链网络中。
步骤二:区块链网络中的存储节点收集一段时间内网络中所述普通节点产生的由关键字(Key)标识的所述数据记录,验证数据后将其打包成区块,形成新区块,并将所述新区块广播给全网存储节点进行共识验证,具体包括:
2-1:存储节点收集一段时间内所述区块链网络中由所述普通节点产生的关键字(Key)标识的数据记录;
2-2:所述存储节点对收集的所述关键字(Key)标识的所述数据记录进行验证,包括权限验证和正确性验证,权限验证检查数据记录中所述数据所有者的ScriptPubK(数据所有者公钥)与ScriptSig(私钥名称)是否匹配,保证对某一Key值(关键字值)记录的新版本发布仅能由该Key值(关键字值)数据所有者进行,权限匹配则通过,权限不匹配则不通过;正确性验证检查数据前驱(PreHash)中指向的数据是否存在且两者Key值(关键字值)是否相同,使同一Key值(关键字值)记录的所有历史版本形成链式结构以便溯源,权限验证和正确性验证中有一项不通过都须将该条数据丢弃;
2-3:将验证通过后的关键字(Key)标识的数据记录集合打包进区块,形成新区块,并将新区块广播给全网存储节点进行共识验证。
步骤三:各存储节点根据共识验证通过后的新区块更新索引,索引模型结构如图2所示,最后将新区块存储,具体包括:
3-1:各存储节点为共识验证通过后的有效的所述新区块构建块内索引(TMPT),构建规则与以太坊交易树相同,均为MPT结构,不同的是这里以数据记录的Key值(关键字值)为关键字(Key)构建块内索引(TMPT),而不是交易序号,最后将最新的块内索引根节点(TMPTRoot)添加到区块头中完成块内索引(TMPT)构建;
3-2:以数据记录的Key值(关键字值)为关键字进行全局区块索引(KMPT)更新,更新规则与以太坊状态树相同,均以区块为单位采用新建分支方式进行以节省存储空间,首先由每个Key值(关键字值)在当前最新的所述全局区块索引(KMPT)树中锁定目标叶节点,并将所述叶节点中最后的块内索引根节点(LatestTMPTRoot)域设置为新区块中的块内索引根节点(TMPTRoot),即完成指向目标区块的索引,最后将构建完成后的全局区块索引根节点(KMPTRoot)添加到所述新区块头中完成所述全局区块索引(KMPT)更新,所述叶节点为全局区块索引(KMPT)树中最底层的节点,存储具体索引信息,即该检索Key值(关键字值)对应数据最新版本所在目标区块中的块内索引根节点(TMPTRoot);
3-3:将新区块存储。
步骤四:根据关键字(Key)查询区块链中存储的关键字(Key)标识的所述数据记录,若记录存在,则返回最新版本关键字(Key)数据记录具体目标数据(Data)及存在性验证路径(path);若记录不存在,则返回Null(不存在)及不存在验证路径,如图3所示,具体包括:
4-1:从所述新区块中获取到当前最新的全局区块索引根节点(KMPTRoot),沿所述全局区块索引根节点(KMPTRoot)以Key值(关键字值)为关键字检索,检索过程中将检索路径(path)保存,若目标叶节点不存在,则返回Null(不存在)及在全局区块索引(KMPT)树中的检索路径,表示不存在证明路径并结束检索过程。若目标叶节点存在,则从所述叶节点中获取到该关键字(Key)记录最新版本所在区块中的块内索引根节点(TMPTRoot)值,同时将此时全局区块索引(KMPT)检索路径清空。全局区块索引(KMPT)树中维护有全局关键字(Key)索引信息,且全局区块索引(KMPT)是一棵MPT,数据在树中的位置仅由数据关键字(Key)决定,故当数据不存在时,在全局区块索引(KMPT)中对目标关键字(Key)的检索路径可以作为不存在证明的依据;若目标叶节点存在,则从所述叶节点中获取到该关键字(Key)记录最新版本所在区块中的块内索引根节点(TMPTRoot)值,同时将此时全局区块索引(KMPT)检索路径(path)清空。继续步骤4-2;
4-2:沿所述4-1中获取到的块内索引根节点(TMPTRoot)值开始,以Key值(关键字值)为关键字对目标区块进行区块内检索,并将区块内检索路径保存于path(路径信息)中用于数据存在性证明,最后检索到目标数据哈希值;
4-3:根据目标数据哈希值到K-V数据库中取出目标数据(Data)的具体信息,将其与4-2中得到的区块内检索路径保存的path(路径信息)一起返回。
K-V数据库将数据哈希值作为关键字(Key),数据内容作为value值存储于K-V数据库中,可以由数据哈希值从K-V数据库中取出数据,数据哈希值即起到了指针的作用,即哈希指针。哈希指针保证了分布式环境中节点数据地址的一致性和数据不可篡改性,是区块链中的基础数据结构。常用的K-V数据库有LevelDB,Redis等。
步骤五:普通用户节点收到查询结果后进行可信验证,如图4所示,具体包括:
5-1:首先判断收到的查询结果类型,若所述目标数据(Data)存在,则为查询存在类型,若为Null(不存在),则为查询不存在类型;
5-2:若为查询不存在类型,则进行数据不存在验证,根据返回的不存在证明路径(path),从全局区块索引根节点(KMPTRoot)开始,首先计算所述全局区块索引根节点(KMPTRoot)的哈希值并与最新区块头中全局区块索引根节点(KMPTRoot)比较是否一致,一致则依次向下进行验证,主要验证查询目标Key值(关键字值)与该路径上节点前缀值是否匹配,路径上各节点对应哈希值是否正确,最后验证路径末节点中与目标关键字(Key)匹配的指向叶节点的域值是否为空,以上条件均验证通过则证明该全局区块索引(KMPT)检索分支有效,查询目标关键字(Key)所对应数据确实不存在,完成不存在证明过程;
5-3:若为查询存在类型,则进行数据存在性验证,验证方法与Merkle证明相同,根据返回的存在证明路径(path),自底向上依次计算各节点哈希值,最后计算出一个根哈希值,将此根哈希值与目标块中块内索引根节点(TMPTRoot)值比较,一致则验证通过,证明目标Key值所对应的目标数据(Data)确实存在,完成数据存在性证明过程。
实施例二见图5-8。
步骤一:区块链网络中普通节点产生由关键字标识的数据记录,以图5中几条数据为例说明。
步骤二:区块链网络中存储节点收集一段时间内网络中普通节点产生的由关键字标识的数据记录,这里以上图中四条数据为例,即一段时间内收集到上图中四条数据,对数据验证后将其打包成块,并将区块广播给全网存储节点进行共识验证。
步骤三:各存储节点根据共识验证通过后的新区块更新索引,具体包括:
3-1:各存储节点为共识验证通过后的有效新区块构建块内索引,构建规则与以太坊交易树相同,均为MPT结构,块内索引叶节点中存储value(值)为该条数据的哈希值,用于从K-V数据库中取出具体数据信息。这里以数据记录Key值为关键字为图5中四条数据构建块内索引,构建结果如图6所示,构建完成后得到一个块内索引根哈希值记为tmptRoot(块内索引根节点),最后该tmptRoot(块内索引根节点)添加到区块头中完成块内索引构建;
3-2:以数据Key值为关键字更新全局区块索引,更新规则与以太坊状态树相同,本实施例中即将如图7所示K-V数据库对插入到全局区块索引中;其中最后的块内索引根节点(LatestTMPTRoot)域中tmptRoot(块内索引根节点)由步骤3-1中得出,插入构建后的全局区块索引索引结果如图8所示。最后得到一个最新tmptRoot(块内索引根节点),将该kmptRoot(全局区块索引根节点)添加到区块头中即完成全局区块索引更新;
3-3:将新区块存储。
步骤四:根据关键字查询区块链中存储的数据记录,若记录存在,返回最新版本关键字数据记录具体目标数据(Data)及存在性验证路径(path);若记录不存在,返回Null及不存在验证路径(path)。本例以查询Key值为a711355,a77d367为例进行说明。
对Key值为a711355的查询,首先在全局区块索引索引中检索,即在步骤3-2中构建的全局区块索引中以a711355为关键字进行检索,同时保存检索路径为path,由步骤3-2中索引图可知,检索锁定目标叶节点存在,则将此时path清空,且LatestTMPTRoot值为tmptRoot,沿此tmptRoot继续进行块内检索,即在步骤3-1中构建的块内块内索引中同样以Key值为关键字检索,同时保存检索路径于path中,检索最后得到该Key值对应的数据哈希值value1,由此value1在K-V数据库中取出对应具体目标数据(Data),最后将该具体目标数据(Data)和块内检索路径path一并返回即可;
对Key值为a77d367的查询,首先在全局区块索引中检索,即在步骤3-2中构建的全局区块索引中以a77d367为关键字进行检索,同时保存检索路径为path,由步骤3-2中索引图可知,检索锁定目标叶节点不存在,将此时在全局区块索引中的检索路径path返回用于数据不存在证明即可;
步骤五:普通用户节点收到查询结果后进行可信验证。
对Key值为a711355的查询,收到的是该Key值对应具体目标数据(Data)和块内检索路径(path),为查询存在类型,需进行数据存在性验证,验证方法与Merkle证明相同,根据返回的存在证明路径(path),自底向上依次计算各节点哈希值,最后计算出一个根哈希值,将此根哈希值与步骤3-1中tmptRoot比较,一致则验证通过,证明目标Key值所对应的目标数据(Data)确实存在,完成数据存在性证明过程。
对Key值为a77d367的查询,收到的是该Key值在全局区块索引中的检索路径(path),为查询不存在类型,需进行数据不存在验证,根据返回的不存在证明路径(path),从全局区块索引根节点开始,首先计算该根节点哈希值并与最新块头中全局区块索引根节点比较是否一致,一致则依次向下进行验证,主要验证查询目标Key值与该路径上节点前缀值是否匹配,路径上各节点对应哈希值是否正确,最后验证路径末节点中与目标Key值匹配的指向叶节点的域值是否为空,以上条件均验证通过则证明该全局区块索引检索分支有效,查询目标Key值所对应数据确实不存在,完成不存在证明过程;
经实验验证,在区块大小为1000笔数据记录,目标数据所在区块深度为500,1000时,本发明索引模型检索方法检索时间为一般块内索引方法的27.6%,22.5%,且随着区块大小及区块深度的增加,本文索引方法的检索效率优势愈加明显。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
Claims (6)
1.一种区块链数据高效可信索引方法,其特征在于:该方法包括以下步骤:
步骤一:区块链网络中的普通节点产生由关键字标识的数据记录;
步骤二:区块链网络中的存储节点收集一段时间内网络中所述普通节点产生的由关键字标识的所述数据记录,验证数据后将其打包成区块,形成新区块,并将所述新区块广播给全网存储节点进行共识验证;
步骤三:各存储节点根据共识验证通过后的所述新区块更新索引,并将所述新区块存储;
步骤四:根据关键字查询区块链中存储的关键字标识的所述数据记录,若记录存在,则返回最新版本关键字数据记录具体信息及存在性验证路径;若记录不存在,则返回Null及不存在验证路径;
步骤五:普通用户节点收到查询结果后进行可信验证。
2.根据权利要求1所述的区块链数据高效可信索引方法,其特征在于:
所述步骤一具体包括:
1-1:生成默认权限信息,包括数据生成时间戳,数据所有者的数据所有者公钥;
1-2:关键字标识的数据记录包括Key值,指定所述数据记录标识的Key值及其数据前驱,若该所述关键字是第一次出现,则数据前驱为Null,否则数据前驱为该关键字所对应的最新版本记录哈希值;
1-3:指定所述数据记录各字段具体内容;
1-4:所述普通节点将生成的所述数据记录用私钥签名为ScriptSig后发布到所述区块链网络中。
3.根据权利要求2所述的区块链数据高效可信索引方法,其特征在于:
所述步骤二具体包括:
2-1:存储节点收集一段时间内所述区块链网络中由所述普通节点产生的关键字标识的数据记录;
2-2:所述存储节点对收集的所述关键字标识的所述数据记录进行验证,包括权限验证和正确性验证,所述权限验证检查数据记录中数据所有者的所述数据所有者公钥名称与ScriptSig是否匹配,权限匹配则通过,权限不匹配则不通过;所述正确性验证检查数据前驱中指向的所述关键字标识的所述数据记录是否存在,且两者Key值是否相同,所述权限验证和正确性验证中有任意一项不通过,则必须将该条数据记录丢弃;
2-3:将验证通过后的关键字标识的所述数据记录集合打包进区块,形成新区块,并将新区块广播给全网存储节点进行共识验证。
4.根据权利要求3所述的区块链数据高效可信索引方法,其特征在于:
所述步骤三具体包括:具体包括:
3-1:各存储节点为共识验证通过后的有效的所述新区块构建块内索引,构建规则为MPT结构,以数据记录的Key值为关键字构建块内索引,最后将最新的块内索引根节点添加到区块头中完成块内索引构建;
3-2:以数据记录的Key值为关键字进行全局区块索引更新,更新规则以区块为单位采用新建分支方式进行以节省存储空间,首先由每个Key值在当前最新的所述全局区块索引树中锁定目标叶节点,并将所述叶节点中最后的块内索引根节点域设置为新区块中的块内索引根节点,即完成指向目标区块的索引,最后将构建完成后的全局区块索引根节点添加到所述新区块头中完成所述全局区块索引更新,所述叶节点为全局区块索引树中最底层的节点,存储具体索引信息;
3-3:将所述新区块存储。
5.根据权利要求4所述的区块链数据高效可信索引方法,其特征在于:
所述步骤四具体包括:具体包括:
4-1:从所述新区块中获取到当前最新的全局区块索引根节点,沿所述全局区块索引根节点以Key值为关键字检索,检索过程中将检索路径保存,若目标叶节点不存在,则返回Null及在全局区块索引树中的检索路径,表示不存在证明路径并结束检索过程;若目标叶节点存在,则从所述叶节点中获取到该关键字记录最新版本所在区块中的块内索引根节点值,同时将此时全局区块索引检索路径清空;
4-2:沿所述4-1中获取到的块内索引根节点值开始,以Key值为关键字对目标区块进行区块内检索,并将区块内检索路径保存于path中用于数据存在性证明,最后检索到目标数据哈希值;
4-3:根据目标数据哈希值到K-V数据库中取出目标数据的具体信息,将其与4-2中得到的区块内检索路径保存的path一起返回。
6.根据权利要求5所述的区块链数据高效可信索引方法,其特征在于:
所述步骤五具体包括:具体包括:
5-1:首先判断收到的查询结果类型,若所述目标数据存在,则为查询存在类型,若为Null,则为查询不存在类型;
5-2:若为查询不存在类型,则进行数据不存在验证,根据返回的不存在证明路径,从全局区块索引根节点开始,首先计算所述全局区块索引根节点的哈希值并与最新区块头中全局区块索引根节点比较是否一致,一致则依次向下进行验证,主要验证查询目标Key值与该路径上节点前缀值是否匹配,路径上各节点对应哈希值是否正确,最后验证路径末节点中与目标关键字匹配的指向叶节点的域值是否为空,以上条件均验证通过则证明该全局区块索引检索分支有效,查询目标关键字所对应数据确实不存在,完成不存在证明过程;
5-3:若为查询存在类型,则进行数据存在性验证,根据返回的存在证明路径,自底向上依次计算各节点哈希值,最后计算出一个根哈希值,将此根哈希值与目标区块中块内索引根节点比较,一致则验证通过,证明目标关键字所对应的目标数据确实存在,完成数据存在性证明过程,所述根哈希值由各个节点哈希值计算得出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111222418.3A CN114020737A (zh) | 2021-10-20 | 2021-10-20 | 一种区块链数据高效可信索引方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111222418.3A CN114020737A (zh) | 2021-10-20 | 2021-10-20 | 一种区块链数据高效可信索引方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114020737A true CN114020737A (zh) | 2022-02-08 |
Family
ID=80056900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111222418.3A Pending CN114020737A (zh) | 2021-10-20 | 2021-10-20 | 一种区块链数据高效可信索引方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114020737A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114756603A (zh) * | 2022-05-23 | 2022-07-15 | 天津大学 | 一种轻量级区块链高效可验证查询方法 |
CN115081031A (zh) * | 2022-07-26 | 2022-09-20 | 成都云智数安科技有限公司 | 一种防篡改的区块链数据存储方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109165224A (zh) * | 2018-08-24 | 2019-01-08 | 东北大学 | 一种在区块链数据库上针对关键字key的索引方法 |
WO2019117651A1 (ko) * | 2017-12-13 | 2019-06-20 | 서강대학교 산학협력단 | 블록체인 기반 IoT 환경에서의 다중 검색을 지원하는 데이터 구조체를 이용한 검색 방법 및 그 방법에 따른 장치 |
CN111339106A (zh) * | 2020-05-18 | 2020-06-26 | 杭州趣链科技有限公司 | 一种区块链数据索引的方法 |
CN113064902A (zh) * | 2021-04-06 | 2021-07-02 | 北京瑞卓喜投科技发展有限公司 | 一种检索链上交易数据的方法、装置和电子设备 |
-
2021
- 2021-10-20 CN CN202111222418.3A patent/CN114020737A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019117651A1 (ko) * | 2017-12-13 | 2019-06-20 | 서강대학교 산학협력단 | 블록체인 기반 IoT 환경에서의 다중 검색을 지원하는 데이터 구조체를 이용한 검색 방법 및 그 방법에 따른 장치 |
CN109165224A (zh) * | 2018-08-24 | 2019-01-08 | 东北大学 | 一种在区块链数据库上针对关键字key的索引方法 |
CN111339106A (zh) * | 2020-05-18 | 2020-06-26 | 杭州趣链科技有限公司 | 一种区块链数据索引的方法 |
CN113064902A (zh) * | 2021-04-06 | 2021-07-02 | 北京瑞卓喜投科技发展有限公司 | 一种检索链上交易数据的方法、装置和电子设备 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114756603A (zh) * | 2022-05-23 | 2022-07-15 | 天津大学 | 一种轻量级区块链高效可验证查询方法 |
CN114756603B (zh) * | 2022-05-23 | 2023-04-07 | 天津大学 | 一种轻量级区块链高效可验证查询方法 |
CN115081031A (zh) * | 2022-07-26 | 2022-09-20 | 成都云智数安科技有限公司 | 一种防篡改的区块链数据存储方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109165224B (zh) | 一种在区块链数据库上针对关键字key的索引方法 | |
US11651036B2 (en) | Integrated index blocks and searching in blockchain systems | |
JP7407912B2 (ja) | ブロックチェーンデータをインデックスする方法およびブロックチェーンデータを格納する方法 | |
CN108039943B (zh) | 一种可验证的加密搜索方法 | |
CN114020737A (zh) | 一种区块链数据高效可信索引方法 | |
Yu et al. | XML schema refinement through redundancy detection and normalization | |
US9135367B2 (en) | XPath evaluation in an XML repository | |
CN109634959A (zh) | 一种区块索引方法及区块索引装置 | |
CN113421160B (zh) | 一种基于区块链的交易追踪溯源方法 | |
CN112286963A (zh) | 一种区块链终端数据可信查询系统及其实现方法 | |
Pei et al. | An efficient query scheme for hybrid storage blockchains based on merkle semantic trie | |
CN101256579A (zh) | 一种数据库范围查询数据组织的方法 | |
CN115328883A (zh) | 一种数据仓库建模方法和系统 | |
CN102378407B (zh) | 一种物联网中的对象名字解析系统及其解析方法 | |
CN116860825B (zh) | 一种基于区块链的可验证检索方法及系统 | |
CN102073716A (zh) | 一种数据外包环境下的查询结果验证方法 | |
CN113535803B (zh) | 一种基于关键字索引的区块链高效检索及可靠性验证方法 | |
Scriney et al. | Efficient cube construction for smart city data | |
Cheng et al. | PathGuide: an efficient clustering based indexing method for XML path expressions | |
CN115269586A (zh) | 一种基于多项式承诺机制的数据库索引的方法 | |
CN116663053A (zh) | 一种支持丰富检索的区块链高效可验证查询方法 | |
Dong et al. | Arm: Authenticated approximate record matching for outsourced databases | |
CN113901131B (zh) | 基于索引的链上数据查询方法及装置 | |
Pankowski | Reconciling inconsistent data in probabilistic XML data integration | |
CN114756603B (zh) | 一种轻量级区块链高效可验证查询方法 |
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 |