[发明专利]一种在区块链数据库上针对关键字key的索引方法有效
申请号: | 201810971875.4 | 申请日: | 2018-08-24 |
公开(公告)号: | CN109165224B | 公开(公告)日: | 2021-02-19 |
发明(设计)人: | 申德荣;焦通;聂铁铮;寇月;于戈 | 申请(专利权)人: | 东北大学 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F21/62;G06F21/64;G06Q20/38 |
代理公司: | 沈阳东大知识产权代理有限公司 21109 | 代理人: | 梁焱 |
地址: | 110819 辽宁*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明提供一种在区块链数据库上针对关键字key的索引方法,涉及区块链数据查询技术领域。该方法首先普通节点根据用户输入的带关键字key的原始数据生成交易记录;存储节点将交易打包到区块中;将区块数据追加写入磁盘文件;根据key值查询交易数据,输出查询结果;普通用户对结果进行可信性验证。本发明直接根据数据关键字进行索引,实现数据的可查询性;将传统区块链中的交易结构扩展到可存储类似于传统数据库的模式结构,提高适用性;根据数字签名技术管理数据权限,提高数据安全性;根据MerkleRBTree自我感知索引是否被篡改,根据交易哈希感知交易是否被篡改,从而保证数据不可篡改性;同时实现轻量级节点的数据验证功能,使得查询端能有效检测数据可信性。 | ||
搜索关键词: | 一种 区块 数据库 针对 关键字 key 索引 方法 | ||
【主权项】:
1.一种在区块链数据库上针对关键字key的索引方法,其特征在于:该方法包括以下步骤:步骤1:普通节点根据用户输入的带关键字key的原始数据生成交易记录,具体包括:步骤1‑1:生成交易默认信息,包括区块链版本号信息以及数据创建时刻的时间戳信息;步骤1‑2:指定该交易的前驱PreHash,若该关键字key是第一次出现,则前驱PreHash置为Null,否则前驱为该关键字key所对应的最新交易的哈希值;步骤1‑3:生成数据权限信息以及数据签名;将ScriptPubk赋值为下一个可对该关键字key数据进行修改的公钥,利用ECDSA算法,根据自己的私钥对交易数据进行签名;步骤2:存储节点将交易打包到区块中,具体包括:步骤2‑1:验证交易格式是否符合规范,过滤无法识别的交易;步骤2‑2:验证交易签名是否有效;根据PreHash值到k‑v数据库中检索其交易索引TxIndex,根据TxIndex检索到前驱交易PreTx,取其指定的下一任公钥信息PreTx.ScriptPubk;根据ECDSA算法的verify()函数进行签名验证,若verify(PreTx.ScriptPubk,Tx.ScriptSig,Tx)=True,则签名有效,否则签名无效,丢弃该交易;步骤2‑3:检测双花;读取交易的PreHash字段,若其不为空,则根据PreHash值到k‑v数据库中检索前驱交易索引TxIndex,如果该索引指明前驱交易的后继交易不为空,则表明待验证交易为双花交易,判定其无效;如果其后继交易为空,则将后继交易赋值为待验证交易的哈希值,待验证交易有效;如果交易的PreHash字段为空,即交易的创建者认为之前不存在与此交易关键字key相同的交易,此时查找系统中是否能够检索到关键字为key的交易,如果检索到则该交易无效,如果未检索到则该交易有效;步骤2‑4:当交易被验证有效之后,将交易插入到区块体中key有序的交易数组vTx[]中,更新MerkleRBTree索引;更新MerkleRBTree的规则如下:初始化当前节点为Merkleroot,比较待插入节点关键字key和当前节点关键字NodeKey,如果key<=NodeKey,则插入到当前节点的左子树,然后更新当前节点为当前节点的左孩子,否则插入到右子树,然后更新当前节点为其右孩子,依次递归,直到最后一层分支节点;插入交易之后,对该树进行旋转使其保证黑色平衡,并递归向上更新分支节点哈希值为Hash(lefthash,rigthhash,key);步骤3:将区块数据追加写入磁盘文件,具体包括:步骤3‑1:将区块头以及区块体中保存交易原始数据的交易数组vTx[]序列化,顺序写入到磁盘文件blk000x中,并返回区块在磁盘中的位置nFile,BlockPos;步骤3‑2:生成每个交易的元数据TxIndex(nFile,BlockPos,n),其中nFile指定第几个文件,BlockPos指定该区块在文件中的偏移量,n指定交易对应在有序数组中的下标,并将每个交易的元数据信息存储到k‑v数据库中,格式为k=Hash(Tx),v=(TxIndex);步骤3‑3:将MerkleRBTree索引项存储在k‑v数据库中,其中k=Hash(lefthash,righthash,key),v=(lefthash,righthash,key);步骤4:根据关键字key查询交易,返回查询结果;从最新的区块开始查找交易,如果该区块没有查找到则查询其前一区块;步骤5:普通用户对查询结果进行可信性验证;普通用户收到验证路径栈和交易信息之后,首先对交易进行Sha256双哈希操作得到交易哈希值Hash(Tx),然后与验证路径栈中弹出的值做Sha256双哈希操作,得到的哈希值继续与栈中弹出的下一个值做哈希,直到栈为空;比较得到的哈希值与本地区块头中的Merkleroot值是否相等,如果相等则数据可信,否则不可信。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东北大学,未经东北大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201810971875.4/,转载请声明来源钻瓜专利网。