一种可降低区块链存储开销的阶梯式数据存储方法及系统

文档序号:25542506发布日期:2021-06-18 20:39阅读:148来源:国知局
一种可降低区块链存储开销的阶梯式数据存储方法及系统

本发明涉及区块链技术,具体涉及一种可降低区块链存储开销的阶梯式数据存储方法及系统。



背景技术:

区块链技术在2008年作为比特币的关键数据被中本聪在《比特币:一种点对点的电子现金系统》中提出,其本质是一个去中心化的数据库。通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案,“矿工”验证交易的合法性并通过工作量证明机制将合法交易打包形成区块,后一个区块包含前一个区块的哈希值,链接形成只增的区块链账本,全网中所有普通节点保存区块链账本的一个副本。区块链技术依赖全网中所有普通节点记账,不依赖任何第三方管理机构或硬件设施,只要不能掌握全网51%的普通节点就不能篡改网络中的数据,安全性和可用性都有了明显改善。更重要的,区块链解决了数字世界中脱离第三方的可信问题,不可信的各方可以依赖区块链完成可信交易,在金融、物联网、公共管理等方面有很大的应用前景。

区块链技术被提出以后得到广泛关注,并取得了迅速的发展。以太坊(ethereum)提供了一个开源的智能合约平台,发布专用的加密数字货币以太币(ether)提供去中心化的以太虚拟机来处理点对点的交易合约。以太坊和区块链代表了公有链,可以被任何人读取、发送交易且能获得有效确认的共识区块。与之相对应的私有链指区块链写入权限仅在一个组织手里,读取权限或者对外开放,或者被任意程度地进行了限制。另外,联盟链共识过程受到预选普通节点控制的区块链(例如,有15个金融机构组成一个共同体,每个机构都运行着一个或者多个普通节点,而且为了使每个区块生效需要获得其中10个机构的确认)。区块链的读取权限可以是任意普通节点、参会者,联盟链被视为“部分去中心化”,典型的有hyperledgerfabric。加入联盟链和私有链中的每个普通节点都要经过许可,未经许可的普通节点不能加入区块链,该类型的区块称为许可链。

区块是区块链的基本结构,由矿工将未被打包的合法交易打包形成去区块。完整区块结构如图1所示,区块头的结构如图2所示。区块头中包含了当前区块的哈希值和前一个区块的哈希值,通过哈希值将各个区块前后链接起来,形成区块链,如图3所示;merkle树根的哈希值表示存储在区块体中的交易所形成的merkle树哈希值;时间戳为区块被打包的时间;矿工通过寻找随机数nonce使得区块的哈希满足一定条件(比如小于特定值)完成对区块的“挖矿”;区块链系统可以动态调节挖矿的难度使得出矿时间保持在十分钟左右。

区块链技术迅速发展的同时也面临着许多技术上的挑战,包括巨大的存储开销、交易延迟、数据的隐私特性等,其中存储开销使得存储的可扩展性差,限制了区块链在物联网、金融等领域的应用。以比特币为例,截止2021年1月20日,区块高度达到666,840,完成了607,924,131笔交易,区块总容量约为383.27gb;同时,持币总普通节点数达到了34,214,269,注册地址总数更大并且在不断增长。区块链技术为有效进行验证,每个加入系统的普通节点都需要同步保存所有区块的一个备份,造成了巨大的存储开销和资源浪费。联盟链和私有链同样面临着巨大的存储问题,因此亟需设计一种低开销存储机制来改善存储困境。

东北大学贾大宇提出了区块链的存储容量可扩展模型,将完整的区块链副本进行分片处理,并将分片数据保存到一定比例的普通节点中;同时,增加普通节点可靠性验证,在保证数据安全性的同时,减少区块链的存储空间。franca提出的迷你区块链是在区块链基础上的改进,通过缩短区块链的链长来降低区块链的开销。它允许将产生很久之前的区块链丢弃,只要保存当前区块最近的若干条区块。上述方法在一定程度上降低了存储开销,但上述两种方案未对数据区块进行区分,存储容量可扩展模型将区块分片处理后会增加新创建区块的查询时间,普通节点本地迷你区块链删除旧区块后区块链安全性降低,数据丢失后不能被查询。

广义上,区块链的子链是指是在主链派生出来的具有其他功能的区块链,子链不能单独存在,必须通过主链提供的基础设施才能运行,同时免费获得主链的全部用户。子链可以定义自己的共识方式和执行模块,如pbft、pos等。本发明中的子链特指联盟链中各个组织内部构造的本地区块链,与各个组织间的主链相对应但又相互独立。组织内部的交易和数据交换存储在本地的子链上,由组织内部的计算普通节点维护账本的一致性;每个组织内设置靶普通节点,负责该组织与其他组织的通信,跨组织的交易和数据交换存储在主链上,由各个组织的靶普通节点维护。子链和主链的结构如图4所示。

为维护主链数据的一致性,对不同区块分类处理需要各个组织通过靶普通节点进行选举产生主节点,本发明利用raft共识leader普通节点的选举方法在靶普通节点中选举产生主节点。普通节点有三种状态(follower、candidate、leader),初始情况下所有普通节点状态为follower,candidate是follower和leader之间的中间状态,该状态下的普通节点竞选成为leader。raft共识算法选举产生主节点的主要内容如下:leader选举:所有普通节点启动时都是follower状态,在一段时间内如果没有收到来自leader的心跳,切换到candidate状态,发起选举;如果收到绝大多数的赞成票(含自己的一票)则成为新的leader;如果发现其他普通节点比自己更新,则主动切换到follower。系统中最多只有一个leader,如果在一段时间里发现没有leader,则大家通过选举-投票选出leader;如果leader故障,那么follower会转换成candidate,重新选出leader。任期:每个leader工作一段时间,然后选出新的leader继续负责。任期以选举开始,然后就是一段或长或短的稳定工作期;同时,任期是递增的,充当了逻辑时钟的作用。

在现有区块链系统中,不管公有链、联盟链还是私有链,为保持账本的一致性每个普通节点本地都会保存所有区块的一个备份,随着链结构的不断增长,备份的数据逐渐增加,造成了巨大的存储开销。不仅使得矿工普通节点的存储空间被占用,导致资源浪费;而且部分存储容量小的普通节点无法完成区块信息的同步,无法加入区块链系统中完成可信交易。



技术实现要素:

本发明要解决的技术问题:针对现有技术的上述问题,提供一种可降低区块链存储开销的阶梯式数据存储方法及系统,本发明对区块信息按照价值进行分类,采取不同的存储策略进行存储,即保证数据的一致性、不可篡改性,又大幅度降低了区块链对于普通节点的存储需求,本发明能够解决区块链技术中区块被大量存储在区块链普通节点导致普通节点的存储开销增加的问题,采用多层次数据阶梯式存储技术,有效解决了区块链在链上存储的开销问题。本发明主要针对联盟链而设计,但同样适用于公有链和私有链。

为了解决上述技术问题,本发明采用的技术方案为:

一种可降低区块链存储开销的阶梯式数据存储方法,包括:

1)主节点每隔指定时间t更新计算各个区块的价值密度vd(block),所述价值密度vd(block)与区块的访问次数n成正比、且与区块的产生时间t成反比,并根据价值密度vd(block)对各个区块进行分级;

2)针对不同分级的区块采用不同开销的存储方式进行存储。

可选地,步骤1)中计算各个区块的价值密度vd(block)的函数表达式为:

上式中,k1和k2均为比例系数,且由0<k1≤1,0<k2≤1,n表示该区块的访问次数,t表示区块产生的时间,且主节点和各个普通节点协同完成各个区块的访问次数的记录更新。

可选地,所述主节点和各个普通节点协同完成各个区块的访问次数的记录更新的步骤包括:每个普通节点在自己的本地为维护一个数组以记录每个区块的访问次数,区块每被访问1次则并向主节点针对该区块发送带有签名的更新访问次数请求,主节点收到请求消息后验证签名,验证通过后针对该区块向全网广播带有主节点签名的更新访问次数指令,各个普通节点收到消息后验证签名,验证通过后针对该区块将访问次数加1,从而完成该区块的访问次数更新。

可选地,步骤1)中对各个区块进行分级是指分别分级为热区块、暖区块和冷区块三种等级,且新创建的区块默认为热区块,步骤2)中针对不同分级的区块采用不同开销的存储方式包括:将热区块存储在本地,将暖区块分片成为n个区块分片且通过n个普通节点进行存储,将冷区块存储在远端数据库,所述区块的区块头结构包括区块分片标志位isseperate,暖区块分片得到的区块分片的片头结构包括:区块分片标志位isseperate、当前区块分片的哈希值presenthash以及下一个区块分片的哈希值nexthash。

可选地,所述将暖区块分片成为n个区块分片且通过n个普通节点进行存储的步骤包括:

a1)主节点针对待存储的暖区块向各个普通节点发送带有主节点签名后的区块分片消息;

a2)各个普通节点收到区块分片消息并验证签名后反馈带有本普通节点签名的确认消息;

a3)主节点接收各个普通节点发送带有本普通节点签名的确认消息并验证签名,若收到确认消息超过一半则按照分片策略执行分片操作:将待存储的暖区块的区块头结构中分片数据结构体separation的区块分片标志位isseperate置为true,将待存储的暖区块按照分片策略分片成为n个区块分片且保持区块头结构不变,然后计算每一个区块分片的哈希并将其填入自己的分片数据结构体separation的当前区块分片的哈希值presenthash、上一个区块分片的分片数据结构体separation的下一个区块分片的哈希值nexthash,且第一个区块分片的当前区块分片的哈希值presenthash为待存储的暖区块分片操作前的哈希值,最后一个区块分片的下一个区块分片的哈希值nexthash为空,从而得到n个区块分片;

a4)针对得到的n个区块分片中的每一个区块分片,选择多个普通节点并发送该区块分片对应的请求普通节点存储切片信息;

a5)收到请求普通节点存储切片信息的普通节点将对应的区块分片替换完整的区块,并向主节点返回存储确认消息,确认自己已经存储了该区块的指定切片;

a6)主节点收到每个区块分片的存储确认信息后,后删除待存储的暖区块。

可选地,步骤2)之后还包括通过将n个区块分片进行切片组合实现暖区块访问的步骤:

b1)主节点针对待组合的暖区块向各个普通节点发送带有主节点签名的切片组合的消息,所述切片组合的消息中包含暖区块访问的两种类型:第一种类型为暖区块更新为冷区块,第二种类型为暖区块查询;

b2)各个普通节点收到切片组合的消息后验证主节点签名,若验证通过,则查询本地是否存储有待组合的暖区块对应的区块分片,若存在待组合的暖区块对应的区块分片,则将本次存储的这些区块分片签名后发送给主节点;

b3)主节点接收带有签名的区块分片,首先进行签名验证,保留签名正确的区块分片;然后验证区块分片的哈希值和完整性;最后将所有的区块分片,根据片头结构中的当前区块分片的哈希值presenthash以及下一个区块分片的哈希值nexthash依次相连直至达到最后一个下一个区块分片的哈希值nexthash为空的区块分片,从而得到完整的暖区块并存储在本地,并将完整的暖区块的区块头结构中分片数据结构体separation的区块分片标志位isseperate置为false;

b4)判断暖区块访问的类型,若类型为暖区块更新为冷区块,则将冷区块存储在远端数据库的步骤并退出;若类型为暖区块查询,则跳转执行下一步;

b5)主节点向各个普通节点发送带签名的存储区块的请求;

b6)各个普通节点收到存储区块的请求后,验证签名和完整的暖区块,全部验证通后存储完整的暖区块,删除本地的区块分片,并向主节点发送签名后的存储确认消息;

b7)主节点若收到存储确认消息并进行签名验证,若收到所有普通节点的存储确认消息,则结束并退出。

可选地,所述将冷区块存储在远端数据库的步骤包括:

c1)主节点针对目标冷区块向远端数据库发送带签名的新增数据请求消息,并向各个普通节点发送带签名的将目标冷区块存储到远端数据库请求消息;

c2)远端数据库在收到新增数据请求消息后进行签名验证,验证通过后则等待普通节点的环签名解密消息,若收到超过半数的普通节点的环签名解密消息,则跳转执行下一步;各个普通节点在收到将目标冷区块存储到远端数据库请求消息后进行签名验证,验证通过后则对目标冷区块进行检查,若目标冷区块正确则进行环签名解密并向远端数据库发送环签名解密消息;

c3)远端数据库首先判断是否已经存储有目标冷区块,若尚未存储目标冷区块,则将目标冷区块存储到数据库的指定位置;然后向主节点和普通节点发送区块存储成功消息,表示目标冷区块已经被成功存储至远端数据库;普通节点若收到区块存储成功消息的数量等于预设阈值,则在本地删除目标冷区块或目标冷区块的区块分片,并通知主节点;

c4)主节点判断目标冷区块在远端数据库中存储的备份数量是否等于预设阈值,若不等于预设阈值,则跳转执行步骤c1)继续存储;否则,结束并退出。

可选地,步骤2)之后还包括实现冷区块访问的步骤:

d1)主节点针对目标冷区块向远端数据库发送带签名的数据请求消息;

d2)远端数据库收到数据请求消息验证签名,验证通过则在本地查询获取目标冷区块,并将目标冷区块信息签名后返回给主节点;

d3)主节点验证远端数据库返回的目标冷区块信息后,验证签名和目标冷区块的完整性、正确性,若全部验证通,则向各个普通节点发送带签名的存储区块的请求;

d4)各个普通节点收到存储区块的请求后,验证签名和目标冷区块,全部验证通后存储完整的目标冷区块,并向主节点发送签名后的存储确认消息;

d5)主节点若收到存储确认消息并进行签名验证,若收到所有普通节点的存储确认消息,则结束并退出。

此外,本发明还提供一种可降低区块链存储开销的阶梯式数据存储系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述可降低区块链存储开销的阶梯式数据存储方法的步骤。

此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行所述可降低区块链存储开销的阶梯式数据存储方法的计算机程序。

和现有技术相比,本发明具有下述优点:

1、本发明对区块信息按照价值进行分类,采取不同的存储策略进行存储,即保证数据的一致性、不可篡改性,又大幅度降低了区块链对于普通节点的存储需求,本发明能够解决区块链技术中区块被大量存储在区块链普通节点导致普通节点的存储开销增加的问题

2、本发明采用多层次数据阶梯式存储技术,有效解决了区块链在链上存储的开销问题。

3、本发明主要针对联盟链而设计,但同样适用于公有链和私有链,具有通用性好的优点。

附图说明

图1为现有技术的区块结构示意图。

图2为现有技术的区块头结构示意图。

图3为现有技术的区块链结构示意图。

图4为现有技术的包含主链、子链的联盟链结构示意图。

图5为本发明实施例方法的基本流程图。

图6为本发明实施例中的多层次存储模型示意图。

图7为本发明实施例中的区块头扩展结构。

图8为本发明实施例中的区块分片结构体。

具体实施方式

下文将以图4所示联盟链为例,对本发明可降低区块链存储开销的阶梯式数据存储方法及系统进行进一步的详细说明。

如图5所示,本实施例可降低区块链存储开销的阶梯式数据存储方法包括:

1)主节点每隔指定时间t更新计算各个区块的价值密度vd(block),价值密度vd(block)与区块的访问次数n成正比、且与区块的产生时间t成反比,并根据价值密度vd(block)对各个区块进行分级;

2)针对不同分级的区块采用不同开销的存储方式进行存储。

本实施例可降低区块链存储开销的阶梯式数据存储方法能够避免节点存储大量用不到的区块,很多创建时间很久的区块在接下来的时间段不会被用到,即便是会用到频率也很低,没必要存储在本地浪费空间;如果将这部分价值密度低的区块存储到远端,就会节省空间,在保证数据不丢失的情况下,增加了区块的查询时间,也就是时间换空间的概念。

需要说明的是,针对图4所示联盟链,联盟内部不同组织内部有不同的节点和计算单元,不同组织之间需要进行数据交互。组织联盟内部的交易和运算区块保存在内部构建的子链上,由组织内所有计算节点和计算单元维护子链账本的一致性;跨组织交互的数据保存在主链上,各个组织内部产生靶节点,主要负责完成与其他组织的交互并维护主链账本的一致性。本实施例中,主节点即为主链上的主节点,各个组织内部产生靶节点即为主链上的普通节点,不同组织通过靶节点选举产生主节点。因此,本实施例可降低区块链存储开销的阶梯式数据存储方法针对联盟链而设计,但同样适用于公有链和私有链。

本实施例中,价值密度vd(block)与区块的访问次数n成正比、且与区块的产生时间t成反比,采用函数表达式可表示为:

上式中,n表示该区块的访问次数,t表示区块产生的时间。作为一种可选的实施方式,本实施例步骤1)中计算各个区块的价值密度vd(block)的函数表达式为:

上式中,k1和k2均为比例系数,且由0<k1≤1,0<k2≤1,n表示该区块的访问次数,t表示区块产生的时间,且主节点和各个普通节点协同完成各个区块的访问次数的记录更新。考虑到不同的场景,本实施例设置了比例系数k1和k2(0<k1,k2≤1)。在实时系统中,信息的失效率比较快,因此价值密度中时间间隔比重更大;在信息的更新频率比较慢的系统中,数据区块的使用次数所占比重更大。通过对比例系数不同的设置,可以满足不同应用场景下对价值密度的具体定义。根据价值密度的计算结果来设立热区块、暖区块和冷区块阈值,即热区块价值密度最高,被访问的频率最高;冷区块价值密度最低,被访问的频率也最低;暖区块的价值密度处于中间,被访问的频率不太高。在不同的物联网系统中,价值密度的计算方法不同,并且高价值密度、中等价值密度、低价值密度的阈值也会随之而变化,这也和物联网系统的复杂性分不开,没有统一的公式可以解决如此庞大的系统,但是低开销存储的思路是一致的。公式中分子分母取对数可以减小数据波动的幅度,且分子分母都是大于1的数据,与使用次数成正比,与时间间隔成反比。使用区块的价值密度来区分区块的使用频率,采取不同的存储策略,保证高频使用的区块能够被快速访问到,使用频率较低的区块占用较少的存储空间,但需要花费较长的时间获取。

本实施例中,主节点和各个普通节点协同完成各个区块的访问次数的记录更新的步骤包括:每个普通节点在自己的本地为维护一个数组以记录每个区块的访问次数,区块每被访问1次则并向主节点针对该区块发送带有签名的更新访问次数请求,主节点收到请求消息后验证签名,验证通过后针对该区块向全网广播带有主节点签名的更新访问次数指令,各个普通节点收到消息后验证签名,验证通过后针对该区块将访问次数加1,从而完成该区块的访问次数更新。作为一种可选的实施方式,本实施例中每个区块的访问次数初始值为1,续区块被访问1次,则当前区块的访问次数加1。为保持该数组的一致性,任何组织内的节点在访问主链中某一区块时,都会通过该组织内的靶节点向主节点发送<request,id,n>σ的消息,其中request为该消息的消息头(下文相同,不再一一介绍),id为请求访问区块的id,σ为该靶节点的签名,n为当前区块的访问次数;主节点收到请求消息后验证该组织的签名信息,验证通过后向全网广播<update,id,n+1>δ,即通过δ签名并发送更新区块使用次数的消息,靶节点收到消息后更新区块使用次数并向主节点发送信息,表示信息更新成功。

如图6所示,本实施例步骤1)中对各个区块进行分级是指分别分级为热区块、暖区块和冷区块三种等级,且新创建的区块默认为热区块,步骤2)中针对不同分级的区块采用不同开销的存储方式包括:将热区块存储在本地,将暖区块分片成为n个区块分片且通过n个普通节点进行存储,将冷区块存储在远端数据库。本实施例中由靶节点选举产生的主节点定时更新区块的价值密度、区分区块体热度。热区块存储在靶节点各个节点的本地,方便节点及时查询数据,暖区块被分片成为n个大小不同的切片,每个节点只保存当前区块的一个切片,查询区块时再对切片进行组合,冷区块被保存到远端数据库,备份数据以备后期查询。通过将区块分为热区块、暖区块和冷区块,区块价值密度逐渐降低,访问频率也逐渐降低,这样存储的位置也相应的变远。热区块访问频率高,存储在本地,可以快速查询区块;冷区块被访问的频率低或者特别低,存储在远端数据库,用到的时候能拿到即可;暖区块的话,切片存储,原先存储整个区块的节点现在只需要存储其中的一个切片,降低存储空间,如果要用到的话再次进行组合,从而能有效提升访问效率。

组织间的数据交互和交易信息被矿工打包形成区块,区块创建的协议是可插拔的,支持pow、pos、pbft等主流的共识协议,区块刚创建开始后成为热区块,所有靶节点在本地存储一个备份,链接到主链。为方便对于区块的分片和组合,创新区块的同时对区块头进行扩展。如图7所示,本实施例中区块的区块头结构包括扩展的分片数据结构体separation,如图8所示,且分片数据结构体separation分别包括:区块分片标志位isseperate、当前区块分片的哈希值presenthash以及下一个区块分片的哈希值nexthash。其中isseperate为bool类型的变量,用来表示当前区块是否被分片,默认为false;presenthash和nexthash是32位长的字节码,前者表示当前切片的哈希值,后者表示分片后下一个区块的哈希值,两者的默认均为空(null)。通过上述包括在区块头增加一个分片的标志位,以及下文对区块分片和组合的操作。既在一定程度上降低了节点的存储容量,也使得区块组合后能被较快的访问到。

当热区块产生后价值密度逐渐降低变成暖区块后,需要将区块进行分片后存储,靶节点不需要存储完整的区块,只需要存储该区块的一个切片。本实施例中,将暖区块分片成为n个区块分片且通过n个普通节点进行存储的步骤包括:

a1)主节点针对待存储的暖区块向各个普通节点发送带有主节点签名后的区块分片消息;

本实施例中,该区块分片消息格式为<seperate,idblock,φ>δ,其中idblock表示要待存储的暖区块的id,φ表示区块分片的策略,并用δ签名。其中,分片策略可以是按照区块结构对区块体进行线性分片,也可以制定智能合约对区块体进行智能分片,也可以是组织间定义的其他分片策略。本文以线性分割为例,将区块体等分成n个小的区块体。

a2)各个普通节点收到区块分片消息并验证签名后反馈带有本普通节点签名的确认消息;

本实施例中,该确认消息消息格式为表示赞成该区块的分片,其中idblock表示要待存储的暖区块的id,φ表示区块分片的策略,并用μi签名。

a3)主节点接收各个普通节点发送带有本普通节点签名的确认消息并验证签名,若收到确认消息超过一半则按照分片策略执行分片操作:将待存储的暖区块的区块头结构中分片数据结构体separation的区块分片标志位isseperate置为true,将待存储的暖区块按照分片策略分片成为n个区块分片且保持区块头结构不变,然后计算每一个区块分片的哈希并将其填入自己的分片数据结构体separation的当前区块分片的哈希值presenthash、上一个区块分片的分片数据结构体separation的下一个区块分片的哈希值nexthash,且第一个区块分片的当前区块分片的哈希值presenthash为待存储的暖区块分片操作前的哈希值,最后一个区块分片的下一个区块分片的哈希值nexthash为空,从而得到n个区块分片;

a4)针对得到的n个区块分片中的每一个区块分片,选择多个普通节点并发送该区块分片对应的请求普通节点存储切片信息;主节点向不同靶节点发送不同的切片信息,发送可以是顺序发送或者随机发送,保证每个切片都被保存多份(靶节点数目远大于n);

本实施例中,发送该区块分片对应的请求普通节点存储切片信息的命令格式为:<store,idblock,idcache,idnode,cache>δ,其中idblock表示要待存储的暖区块的id,idcache为当前区块分片的哈希,idnode为存储区块分片的目标节点,cache为该区块分片的信息,δ表示主节点签名。

a5)收到请求普通节点存储切片信息的普通节点将对应的区块分片替换完整的区块,并向主节点返回存储确认消息,确认自己已经存储了该区块的指定切片;

本实施例中,存储确认消息格式为:其中idblock表示要待存储的暖区块的id,idcache为当前区块分片的哈希,μi表示普通节点签名。

a6)主节点收到每个区块分片的存储确认信息后,后删除待存储的暖区块。

将暖区块分片成为n个区块分片且通过n个普通节点进行存储之后,当暖区块价值密度降低成为冷区块或者节点查询暖区块时,需要将切片后的数据组合成为完整区块,存储到远端的数据库或者供节点使用。主节点进行切片组合的时机有以下两种:a.主节点更新区块价值密度,暖区块价值密度降低成为冷区块;b.当靶节点查询指定区块,更新区块查询次数发现该区块被分片。本实施例中,步骤2)之后还包括通过将n个区块分片进行切片组合实现暖区块访问的步骤:

b1)主节点针对待组合的暖区块向各个普通节点发送带有主节点签名的切片组合的消息,所述切片组合的消息中包含暖区块访问的两种类型:第一种类型为暖区块更新为冷区块,第二种类型为暖区块查询;

本实施例中,切片组合的消息的命令格式为:<combination,idblock,idtop,flag>δ,其中idblock该区块的哈希值;idtop表示该区块切片后的切片头哈希值,切片头保存在主节点本地;flag为暖区块访问的类型,flag为0时表示区块变为冷区块,为1时表示区块被查询。

b2)各个普通节点收到切片组合的消息后验证主节点签名,若验证通过,则查询本地是否存储有待组合的暖区块对应的区块分片,若存在待组合的暖区块对应的区块分片,则将本次存储的这些区块分片签名后发送给主节点;

本实施例中,普通节点将本次存储的这些区块分片签名后发送给主节点的命令格式为:其中idblock表示要待存储的暖区块的id,idcache为当前区块分片的哈希,cache表示区块分片数据,μi表示普通节点签名。

b3)主节点接收带有签名的区块分片,首先进行签名验证,保留签名正确的区块分片;然后验证区块分片的哈希值和完整性;最后将所有的区块分片,根据片头结构中的当前区块分片的哈希值presenthash以及下一个区块分片的哈希值nexthash依次相连直至达到最后一个下一个区块分片的哈希值nexthash为空的区块分片,从而得到完整的暖区块并存储在本地,并将完整的暖区块的区块头结构中分片数据结构体separation的区块分片标志位isseperate置为false。可选地,本实施例中还包括将分片数据结构体separation的当前区块分片的哈希值presenthash设置为完整的暖区块的哈希值。本实施例中将暖区块分片成为n个区块分片且通过n个普通节点进行存储,分片策略为线性分块,因此将所有的区块分片组合时也是采用线性组合的方式。此外,也可以根据需要采用其他不同的分块及组合方式,在此不再展开说明。

b4)判断暖区块访问的类型,若类型为暖区块更新为冷区块,则将冷区块存储在远端数据库的步骤并退出;若类型为暖区块查询,则跳转执行下一步;

b5)主节点向各个普通节点发送带签名的存储区块的请求;

本实施例中,存储区块的请求的命令格式为:<store,idblock,block>δ,其中idblock该区块的哈希值,block为组合得到的完整的暖区块,δ表示主节点签名。

b6)各个普通节点收到存储区块的请求后,验证签名和完整的暖区块,全部验证通后存储完整的暖区块,删除本地的区块分片,并向主节点发送签名后的存储确认消息;

本实施例中,存储确认消息的命令格式为:其中idblock该区块的哈希值,block为组合得到的完整的暖区块,μi表示普通节点签名。

b7)主节点若收到存储确认消息并进行签名验证,若收到所有普通节点的存储确认消息,则结束并退出。

需要说明的是,本实施例中通过将n个区块分片进行切片组合实现暖区块访问以后,暖区块就会以完整的暖区块的方式替代分片存储的方式存储,这样是考虑到了可能会由于访问增加导致其转换为热区块的可能,从而能够提高区块的访问效率。此外,也可以根据需要在步骤b6)中不删除本地的区块分片,且在b7)中在确认完成两种类型的操作后删除完整的暖区块,从而实现始终通过n个区块分片的方式保存暖区块。

当区块价值密度降低,暖区块变为冷区块时,将暖区块切片组合后存储到远端数据库。远端数据库通过环签名技术加密,各个组织的靶节点可以读取其中的其中的区块数据;写入操作需要多方验证,超过一定数据的节点验证通过后才可以添加数据,本实施例以超过半数的靶节点签字确认才能写数据库为例;数据库不支持删除操作。

本实施例中,将冷区块存储在远端数据库的步骤包括:

c1)主节点针对目标冷区块向远端数据库发送带签名的新增数据请求消息,并向各个普通节点发送带签名的将目标冷区块存储到远端数据库请求消息;本实施例中,主节点向远端数据库发送带签名的新增数据请求消息的命令格式为:<addblock,idblock,block>δ,其中idblock该区块的哈希值,block为组合得到的完整的暖区块,δ表示主节点签名。主节点向普通节点发送将目标冷区块存储到远端数据库请求消息的命令格式为:<storeremote,idblock,idab>δ,其中idblock该区块的哈希值,iddb为远端数据库,δ表示主节点签名。

c2)远端数据库在收到新增数据请求消息后进行签名验证,验证通过后则等待普通节点的环签名解密消息,若收到超过半数的普通节点的环签名解密消息,则跳转执行下一步;各个普通节点在收到将目标冷区块存储到远端数据库请求消息后进行签名验证,验证通过后则对目标冷区块进行检查,若目标冷区块正确则进行环签名解密并向远端数据库发送环签名解密消息;

c3)远端数据库首先判断是否已经存储有目标冷区块,若尚未存储目标冷区块,则将目标冷区块存储到数据库的指定位置;然后向主节点和普通节点发送区块存储成功消息,表示目标冷区块已经被成功存储至远端数据库;普通节点若收到区块存储成功消息的数量等于预设阈值,则在本地删除目标冷区块或目标冷区块的区块分片,并通知主节点;本实施例中,远端数据库向主节点和普通节点发送区块存储成功消息的命令格式为:<storedremote,idblock>πdb,其中idblock该区块的哈希值,πdb表示远端数据库签名;普通节点收到区块存储成功消息的数量等于预设阈值后通知主节点的命令格式为:其中idblock该区块的哈希值,μi表示普通节点签名。

c4)主节点判断目标冷区块在远端数据库中存储的备份数量是否等于预设阈值(例如本实施例中为3),若不等于预设阈值,则跳转执行步骤c1)继续存储;否则,结束并退出。

当靶节点需要访问冷区块内存储的数据时,可以直接从数据库获得该区块的完整信息;若短时间内多个靶节点频发访问同一冷区块,则将区块从远端数据库读取至本地,所有靶节点和主节点存储该区块的一个备份。

本实施例中,步骤2)之后还包括实现冷区块访问的步骤:

d1)主节点针对目标冷区块向远端数据库发送带签名的数据请求消息;

本实施例中,该数据请求消息的命令格式为:<getremote,idblock,iddb>δ,其中idblock该区块的哈希值,iddb为远端数据库,δ表示主节点签名。

d2)远端数据库收到数据请求消息验证签名,验证通过则在本地查询获取目标冷区块,并将目标冷区块信息签名后返回给主节点;

本实施例中,远端数据库将目标冷区块信息签名后返回给主节点消息的命令格式为:<returnblock,idblock,block>πdb,其中idblock该区块的哈希值,block为目标冷区块,πdb表示远端数据库签名。

d3)主节点验证远端数据库返回的目标冷区块信息后,验证签名和目标冷区块的完整性、正确性,若全部验证通,则向各个普通节点发送带签名的存储区块的请求;

本实施例中,主节点向各个普通节点发送带签名的存储区块的请求的命令格式为:<store,idblock,block>δ,其中idblock该区块的哈希值,block为目标冷区块,δ表示主节点签名。

d4)各个普通节点收到存储区块的请求后,验证签名和目标冷区块,全部验证通后存储完整的目标冷区块,并向主节点发送签名后的存储确认消息;

本实施例中,普通节点向主节点发送签名后的存储确认消息的命令格式为:其中idblock该区块的哈希值,μi表示普通节点签名。

d5)主节点若收到存储确认消息并进行签名验证,若收到所有普通节点的存储确认消息,则结束并退出。

此外,本实施例还提供一种可降低区块链存储开销的阶梯式数据存储系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述可降低区块链存储开销的阶梯式数据存储方法的步骤。

此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行所述可降低区块链存储开销的阶梯式数据存储方法的计算机程序。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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