一种区块索引方法及区块索引装置与流程

文档序号:17442200发布日期:2019-04-17 04:54阅读:255来源:国知局
一种区块索引方法及区块索引装置与流程

本发明涉及区块链技术领域,尤其涉及一种区块索引方法及区块索引装置。



背景技术:

区块栈blockstack在底链上构建了一个独立的命名系统。底层中的区块链主要用来记录“name-value”对(名值对)的状态变化。blockstack的底层,即区块链层,主要包含区块链(目前是比特币)以及虚拟链(virtualchain)。虚拟链用来存储底层区块链上已验证交易的当前状态。当前的blockstack已经在虚拟链上实现了“区块链命名服务(bns,blockchainnamesystem)”,它类似于互联网的域名系统(dns,domainnamesystem),而bns存储的是区块链地址与人类可读名称的映射。这些特定的名称由底层区块链上拥有相应地址和私钥的用户所持有,对应地,用户通过拍卖流程注册新名称,但是相关的技术细节信息还未明确。底层区块链中指针指向区块文件作为哈希过程,同时仅在区块链层中存储指针,以使区块链轻量化。

另外,blockstack中的存储层将加密数据(由用户密钥签名后)存储在云服务中,而云服务提供商只能看到加密数据。blockstack的区块定位信息存储在区域文件zonefile中。区块定位的现有解决方案把每一个区块的数据结构修改为关系型数据库,通过关系型数据库用sql(structuredquerylanguage,结构化查询语言)语句进行快速查询;另一种解决方案是利用时间戳在临近的几个区块中快速索引到区块的位置,时间戳类似于书籍的页码,根据区块的时间戳来快速锚定区块的位置。

现有的区块索引方案在构建多方索引表时,每当新增一个区块时就要重新计算包括所有区块的索引表,不仅会造成区块链运算资源的浪费,而且会造成交易效率的低下。



技术实现要素:

本发明提供了一种区块索引方法及区块索引装置,以解决现有技术中构建多方索引表时新增区块要重新计算包括所有区块的索引表,造成区块链运算资源的浪费和交易效率低下的问题。

本发明的一个方面,提供了一种区块索引方法,包括以下步骤:

选取n个区块构建主索引表,其中,主索引表中包含所述n个区块的索引信息,n为大于或等于1的整数;

对于n个区块之后生成的区块,构建一个或多个子索引表,其中,在先构建的子索引表包含的区块按时序排列在在后构建的子索引表包含的区块之前;

其中,主索引表以及各子索引表中分别包括用于与下一个子索引表连接的分离区块,每个子索引表中分别存储有对应分离区块的区块信息。

进一步地,对于n个区块之后生成的区块,构建一个或多个子索引表的步骤包括:

对于n个区块之后生成的区块,以n个区块之后生成的第一个区块为始点,每经过预设时间阈值构建一个子索引表。

进一步地,还包括:

检测到新增区块时,获取最新构建的子索引表上报的分离区块的区块信息;

对获取的区块信息进行验证,当验证通过,且当前距离所述最新构建的子索引表的构建时间未达到所述预设时间阈值时,更新所述最新构建的子索引表,将所述新增区块的索引信息添加到该子索引表中。

进一步地,所述分离区块的区块信息包括区块高度及区块哈希值。

进一步地,n的取值范围在总区块数的三分之一至二分之一之间。

进一步地,构建一个或多个子索引表之后,还包括步骤:

在区块链各节点对主索引表完成验证后,获取签名最多的主索引表;

在签名最多的主索引表和子索引表之间构建默克尔树merkletree;

在利用共识算法选举出的共识节点中存放所述默克尔树merkletree。

本发明的另一个方面,提供了一种区块索引装置,包括:

主索引表构建模块,用于选取n个区块构建主索引表,其中,主索引表中包含所述n个区块的索引信息,n为大于或等于1的整数;

子索引表构建模块,用于对于n个区块之后生成的区块,构建一个或多个子索引表,其中,在先构建的子索引表包含的区块按时序排列在在后构建的子索引表包含的区块之前;

其中,主索引表以及各子索引表中分别包括用于与下一个子索引表连接的分离区块,每个子索引表中分别存储有对应分离区块的区块信息。

进一步地,子索引表构建模块具体用于对于n个区块之后生成的区块,以n个区块之后生成的第一个区块为始点,每经过预设时间阈值构建一个子索引表。

进一步地,还包括:

区块信息获取模块,用于检测到新增区块时,获取最新构建的子索引表上报的分离区块的区块信息,并发送至子索引表更新模块;

子索引表更新模块,用于对获取的区块信息进行验证,当验证通过,且当前距离所述最新构建的子索引表的构建时间未达到所述预设时间阈值时,更新所述最新构建的子索引表,将所述新增区块的索引信息添加到该子索引表中。

进一步地,所述分离区块的区块信息包括区块高度及区块哈希值。

本发明提供的区块索引方法及区块索引装置,与现有技术相比具有以下进步:通过选取n个区块构建主索引表,对于n个区块之后生成的区块,构建一个或多个子索引表,如此每当新增一个区块时只需要重新计算包括新增区块在内的子索引表,能够节约运算资源和时间,提高更新区块索引的效率和交易效率;另外,在主索引表以及各子索引表中分别包括用于与下一个子索引表连接的分离区块,每个子索引表中分别存储有对应分离区块的区块信息,利用分离区块的区块信息可以对子索引表进行验证,保证了子索引表的真实性、安全性和正确性。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本发明实施例中区块索引方法的流程图;

图2为本发明实施例中区块索引装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。

本发明实施例提供了一种区块索引方法及区块索引装置。

如图1所示,本发明实施例的区块索引方法,包括以下步骤:

s1、选取n个区块构建主索引表,其中,主索引表中包含所述n个区块的索引信息,n为大于或等于1的整数;

s2、对于n个区块之后生成的区块,构建一个或多个子索引表,其中,在先构建的子索引表包含的区块按时序排列在在后构建的子索引表包含的区块之前;

其中,主索引表以及各子索引表中分别包括用于与下一个子索引表连接的分离区块,每个子索引表中分别存储有对应分离区块的区块信息。

这里,主索引表以及各个子索引表按时序排序,主索引表包含前n个区块的索引信息,子索引表包含n个区块之后生成区块的索引信息。且在后的子索引表中存储有排列在其之前的子索引表或主索引表的分离区块的区块信息。

本发明实施例的区块索引方法,通过选取n个区块构建主索引表,对于n个区块之后生成的区块,构建一个或多个子索引表,如此每当新增一个区块时只需要重新计算包括新增区块在内的子索引表,能够节约运算资源和时间,提高更新区块索引的效率和交易效率;另外,在主索引表以及各子索引表中分别包括用于与下一个子索引表连接的分离区块,每个子索引表中分别存储有对应分离区块的区块信息,利用分离区块的区块信息可以对子索引表进行验证,保证了子索引表的真实性、安全性和正确性。

本发明实施例的区块索引方法,在具体实施时,优选的,可以以创世区块为始点选取n个区块构建主索引表。如此能够保证将区块链中所有的区块都记录到主索引表和子索引表中。当然,也可以根据用户需要以其他的区块作为始点进行索引表的构建。

本发明实施例中,区块的索引信息可以是区块编号、区块哈希、交易id索引交易、区块交易编号、交易id索引区块或交易id索引交易验证码等,但不限于此。区块哈希可以作为区块无数据的一部分存储在独立的数据库表中,以便更快地从硬盘检索区块。

本发明实施例的区块索引方法,在具体实施时,优选的,步骤s2对于n个区块之后生成的区块,构建一个或多个子索引表的步骤包括:

对于n个区块之后生成的区块,以n个区块之后生成的第一个区块为始点,每经过预设时间阈值构建一个子索引表。

此时,所有子索引表按时序依次构建,子索引表包含的区块也按时序依次排列,即在先的子索引表包含的区块按时序排列在在后的子索引表包含的区块之前;且子索引表从上一个索引表分离时开始到下一个子索引表分离的时间间隔预设时间阈值t,如此当新增区块时,可以利用预设时间阈值t准确确定应该由哪个子索引表认领,从而快速更新对应的子索引表。

其中,预设时间阈值t可以通过共识算法计算得到,如可通过pos(proofofstake,股份权益证明)共识算法计算得到,以保证各节点对预设时间阈值t的一致性,避免恶意篡改,提高安全性。预设时间阈值t描述的是子索引表从上一个索引表分离时开始到下一个子索引表分离的时间间隔,它决定了子索引表中索引的区块数量,利用预设时间阈值t可快速构建子索引表,保证了索引表建立的有效性和高效性。

如图1,本实施例的区块索引方法,在具体实施时,优选的,还包括步骤:

s3、检测到新增区块时,获取最新构建的子索引表上报的分离区块的区块信息;

s4、对获取的区块信息进行验证,当验证通过,且当前距离所述最新构建的子索引表的构建时间未达到所述预设时间阈值时,更新所述最新构建的子索引表,将所述新增区块的索引信息添加到该子索引表中。

此时,在没有“恶意”认领的情况下所有的区块默认是按时序进行排序的,新增区块由于是最新生成的区块,因此按时序排在最后,则理论上应该由按时序排在最后的子索引表认领,即最新构建的子索引表认领。这里,首先获取最新构建的子索引表上报的分离区块的区块信息,对最新构建的子索引表的身份进行验证,证实其是最新构建的子索引表,以保证安全性,当验证通过,且没有到达分离出下一个子索引表的时间时,更新该最新构建的子索引表即可,从而当新增一个区块时只需要重新计算包括新增区块在内的子索引表,能够节约运算资源和时间,提高建立区块索引的效率和交易效率。更新最新构建的子索引表时,可同时更新子索引表的相关确认防伪机制。

如果验证通过,且当前距离最新构建的子索引表的构建时间已经达到预设时间阈值,则构建一个新的子索引表,存储新增区块的索引信息。

其中,可将最新构建的子索引表上报的分离区块的区块信息与前一个子索引表存储的分离区块的区块信息进行对比,以对最新构建的子索引表进行验证。

其中,构建主索引表之后,每新增一个区块,最新构建的子索引表上报一次分离区块的区块信息进行验证,因此理论上能接收到所有子索引表上报的分离区块的区块信息,且所有子索引表的身份都能得到验证。

本发明实施例的区块索引方法,在具体实施时,优选的,所述分离区块的区块信息包括区块高度及区块哈希值。用于验证子索引表的身份,并确保子索引表的真实性。

如图1,优选的,步骤s2之后还包括步骤:

s21、在区块链各节点对主索引表完成验证后,获取签名最多的主索引表;

s22、在签名最多的主索引表和子索引表之间构建默克尔树merkletree;

s23、在利用共识算法选举出的共识节点中存放所述默克尔树merkletree。

此时,各节点也可以是各用户/参与方,通过签名保证主索引表和子索引表的真实性和正确性,有利于提高索引表建立的效率和可靠性。且利用默克尔树merkletree可以对主索引表和子索引表进行验证。如果当前无最新子索引表,则参与方使用自己的私钥对索引记录进行签名,在达到时间阈值构建新的子索引表时,可以促进生成新子索引表;如果当前已经存在子索引表,则对比参与方哈希值与快速索引表哈希值,若一致,则表明原子索引表是正确的,并且在子索引表中增加签名,作为对该子索引表的确认。若索引表的确认存在争端,最终由共识节点保存的merkletree(一种数据树状结构,每个叶子节点记录数据块的哈希值,每个非叶子节点记录的是其对应叶子节点的加密哈希值)以及各子索引表提交的分离区块高度和区块哈希共同决定。

优选的,共识节点中存储主索引表和子索引表的哈希值。若子索引表要证明它是前一个索引表的子索引表,需要向其提交merkleproof(提供merkletree上数据有效性的证明),分离区块高度,以及分离区块的哈希值,与前一个索引表中存储的分离区块高度等进行比对,若相同,则该子索引表是前一个索引表的子索引表,具有真实性。

优选的,主索引表中包含有多个按序排列的索引记录,一个索引记录记录了对应区块上所有的记录汇总,如区块的哈希值、具体内容等,每个区块都有一个主体id,主体id是根据区块的时间戳进行排序的。具体实施时,主索引表和子索引表中均存储有分离区块的区块高度及区块哈希值,用于比对从而判断子索引表的正确性。

本发明实施例的区块索引方法,在具体实施时,优选的,n的取值范围在总区块数的三分之一至二分之一之间。n的取值为当前区块总数量的1/3到1/2,选取数量过少或过多,都会本发明实施例快速更新子索引表的效果,因此n的取值为当前区块数量的1/3到1/2,能够达到快速更新子索引表的效果。

本发明实施例的区块索引方法,在具体实施时,优选的,各节点对主索引表或子索引表验证通过后,可使用私钥对主索引表或子索引表进行签名。可选用签名最多的主索引表或子索引表,以保证索引表的正确性和真实性。

本发明实施例的区块索引方法,在具体实施时,优选的,索引记录以其对应区块的时间戳为序进行排列,以保证索引记录与其对应的区块的一致性,使检索查询方便。

如图2所示,本发明实施例的实现如上述实施例中所述区块索引方法的区块索引装置,包括:

主索引表构建模块21,用于选取n个区块构建主索引表,其中,主索引表中包含所述n个区块的索引信息,n为大于或等于1的整数;

子索引表构建模块22,用于对于n个区块之后生成的区块,构建一个或多个子索引表,其中,在先构建的子索引表包含的区块按时序排列在在后构建的子索引表包含的区块之前;

其中,主索引表以及各子索引表中分别包括用于与下一个子索引表连接的分离区块,每个子索引表中分别存储有对应分离区块的区块信息。

本发明实施例的区块索引装置,通过选取n个区块构建主索引表,对于n个区块之后生成的区块,构建一个或多个子索引表,如此每当新增一个区块时只需要重新计算包括新增区块在内的子索引表,能够节约运算资源和时间,提高更新区块索引的效率和交易效率;另外,在主索引表以及各子索引表中分别包括用于与下一个子索引表连接的分离区块,每个子索引表中分别存储有对应分离区块的区块信息,利用分离区块的区块信息可以对子索引表进行验证,保证了子索引表的真实性、安全性和正确性。

本发明实施例的区块索引装置,具体实施时,优选的,子索引表构建模块具体用于对于n个区块之后生成的区块,以n个区块之后生成的第一个区块为始点,每经过预设时间阈值构建一个子索引表。预设时间阈值可以通过pos(股份权益证明)共识算法计算得到,预设时间阈值t描述的是子索引表从上一个索引表分离时开始到下一个子索引表分离的时间间隔,它决定了子索引表中索引的区块数量,保证了索引表建立的有效性和高效性。

如图2所示,本发明实施例的区块索引装置,具体实施时,优选的,还包括:

区块信息获取模块23,用于检测到新增区块时,获取最新构建的子索引表上报的分离区块的区块信息,并发送至子索引表更新模块;

子索引表更新模块24,用于对获取的区块信息进行验证,当验证通过,且当前距离所述最新构建的子索引表的构建时间未达到所述预设时间阈值时,更新所述最新构建的子索引表,将所述新增区块的索引信息添加到该子索引表中。有利于保证新增区块产生时有效且快速的建立新的子索引表。

本发明实施例的区块索引装置,在具体实施时,优选的,所述分离区块的区块信息包括区块高度及区块哈希值。用于判断和确保子索引表的真实性。

本发明实施例的区块索引装置,在具体实施时,优选的,n的取值范围在总区块数的三分之一至二分之一之间。n的取值为当前区块数量的1/3到1/2,选取数量过少或过多,都无法达到快速索引的效果,因此n的取值为当前区块数量的1/3到1/2。

本发明实施例的区块索引装置,在具体实施时,优选的,主索引表构建模块以创世区块为始点构建主索引表。能够保证将区块链中所有的区块都记录到主索引表或者子索引表中。也可以根据用户需要以其他的区块作为始点进行索引表的构建。

本发明实施例的区块索引装置,在具体实施时,优选的,还包括:

主索引表获取模块,用于在区块链各节点对主索引表完成验证后,获取签名最多的主索引表;

默克尔树构建模块,用于在签名最多的主索引表和子索引表之间构建默克尔树merkletree;

默克尔树存储模块,用于在利用共识算法选举出的共识节点中存放所述默克尔树merkletree。

本发明实施例的区块索引方法及区块索引装置在具体使用时,数据查询者向共识节点发出查询请求,根据merkletree确定所在的索引表,共识节点中只存储主索引表和子索引表的哈希hash值;提取索引表中根据排序完成的主体id,搜索要查询的主体id;若查询到所需的主体id,提取索引记录中根据记录时间排好序的主体记录;访问选中记录中的服务地址以获取信息;

区块定位流程如下:区块定位者向共识服务节点提交区块定位请求;共识服务节点随机将其广播给网络中的其他节点,并向区块定位者发送请求定为区块所在的索引表;区块定位者依据时间戳和索引表快速定位临近的几个区块;区块定位者在临近的几个区块中筛查得到准确区块的定位。

本发明实施例将多方索引表通过区块偏移量和时间阈值分隔成主索引表和子索引表,基于主索引和子索引来merkletree,并通过股份权益证明选举共识服务节点,方便用户对区块的快速检索。另外,因为索引表的确认是由多方独立计算共同确认,并设定了相关的防伪机制保证了索引表的正确性。

本发明实施例的区块索引方法及区块索引装置,能够解决区块索引时多方共建索引表时造成的重复计算问题,具有提高交易效率的优点,另外,索引表的相关确认防伪机制有利于提高索引的准确性。

本发明一实施例还提供了一种智能合约执行系统,包括处理器,存储器,存储在存储器上并可在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现如下步骤:

选取n个区块构建主索引表,其中,主索引表中包含所述n个区块的索引信息,n为大于或等于1的整数;

对于n个区块之后生成的区块,构建一个或多个子索引表,其中,在先构建的子索引表包含的区块按时序排列在在后构建的子索引表包含的区块之前;

其中,主索引表以及各子索引表中分别包括用于与下一个子索引表连接的分离区块,每个子索引表中分别存储有对应分离区块的区块信息。

可选的,该计算机程序被处理器执行时还实现如下步骤:

对于n个区块之后生成的区块,以n个区块之后生成的第一个区块为始点,每经过预设时间阈值构建一个子索引表。

可选的,该计算机程序被处理器执行时还实现如下步骤:

检测到新增区块时,获取最新构建的子索引表上报的分离区块的区块信息;

对获取的区块信息进行验证,当验证通过,且当前距离所述最新构建的子索引表的构建时间未达到所述预设时间阈值时,更新所述最新构建的子索引表,将所述新增区块的索引信息添加到该子索引表中。

可选的,所述分离区块的区块信息包括区块高度及区块哈希值。

可选的,n的取值范围在总区块数的三分之一至二分之一之间。

可选的,该计算机程序被处理器执行时还实现如下步骤:

在区块链各节点对主索引表完成验证后,获取签名最多的主索引表;

在签名最多的主索引表和子索引表之间构建默克尔树merkletree;

在利用共识算法选举出的共识节点中存放所述默克尔树merkletree。

本发明一实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,上述计算机程序被处理器执行时实现上述区块索引方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1