一种区块链分片的高效存储重配置方法
技术领域
本发明属于区块链、区块链分片应用技术领域,具体涉及一种区块链分片的高效存储重配置方法。
背景技术
横向扩展性使得分布式数据库的整体性能随着集群节点数的增加而线性提升。比特币、以太坊和Hyperledger Fabric目前都采用全网节点共享一条区块链的单链方案,网络上的每个节点需要处理、存储全网的所有交易和全部数据,整个区块链系统的处理能力实际上受限于单个计算节点的处理能力。另外,受到共识算法的影响,随着节点数的增加,系统整体处理能力不但未随之提升,甚至还会降低。
为了解决区块链处理交易的可扩展性, 利用多个并行的委员会来处理网络中不同分片的交易的混合共识机制被提出, 也被称为分片共识 (sharding consensus) 机制。其包括选举委员会成员、委员会成员分配、选举委员会领导者、运行委员会内分布式一致性算法、广播区块和重配置委员会等步骤。从分片层次上来看,又分为通信分片(communication sharding)、计算分片 (computation sharding)、存储分片 (storagesharding)三个层次。分片技术的关键在于设计合理的分片方式, 支持周期性轮换和新旧节点更替, 同时还要兼顾跨分片交易的原子性问题。
Elastico 协议是区块链上首个基于分片思想的共识机制, 利用 PoW 对网络中的节点进行分组, 不同分组并行处理不同的数据, 再由特定一组进行打包记录。Omniledger 利用随机数生成算法 RandHound 协议和基于可验证随机函数的抽签算法实现定期分组, 并提出利用锁定交易的方式处理跨分片交易。此外, 英国央行提出的法定数字货币框架 RSCoin 方案也在许可区块链中采用分片技术提高区块链的扩展性。
分片技术虽然从理论上解决了 PoW 扩展性差的问题, 却引入了跨链交易原子性问题, 需要强安全假设, 降低了区块链的安全性。为了防止恶意节点慢适应网络分片划分的结果,逐渐控制片内其余诚实节点,偏置新加入成员分配结果,现有的分片协议会周期性得进行委员会的重分配,本专利描述中将每一个周期称之为一个epoch。如果全部节点参与重分片,系统会在每个时期开始时在全局重新配置期间停止处理事务,直到有足够的验证者引导其内部状态为止,这导致了一个系统停止服务的时间段,另外节点之间的数据交换也会造成网络通信的急剧上升,严重导致网络的瘫痪。为了在过渡阶段保持可操作性,OmniLedger每次最多可以交换分片大小的1/3,逐渐将验证节点交换到每个时期的每个分片上。逐步过渡的方式虽然可以使其余的验证节点在1/3节点重分配引导时继续向客户提供服务,但是,批数越大,则剩下的诚实验证节点数量不足以达成共识的风险就越大,节点重分配对网络造成的压力越大。
因此,基于上述问题,本发明提供一种区块链分片的高效存储重配置方法。
发明内容
发明目的:本发明的目的是提供一种区块链分片的高效存储重配置方法,一方面缩短系统服务暂停的时间,减轻系统切换时节点之间进行数据交换所带来的网络负载压力,同时提高系统的安全性,另一方面优化分片区块链的交易跨片的验证方式,提高系统的交易处理速率。
技术方案:本发明的提供一种区块链分片的高效存储重配置方法,包括以下步骤,步骤1、验证节点运行网络划分重配置协议,完成重分组,对主链区块进行共识,主链区块主要记录新epoch里节点的身份、分组信息、地址账户的余额、上一个epoch每个分片最后一个区块的哈希值。步骤2、验证节点切换至最新的网络分片状态,此时分片对应的新旧验证节点无需进行存储的交易数据的交换。步骤3、交易的计算分片,根据交易哈希值的最后K比特决定对应的节点分组。步骤4、交易处理,主链区块充当交易输入跨片验证路由表,判断需要验证的交易输入是否跨分片跨epoch,跨分片跨epoch的交易输入验证根据分片序号和epoch序号分组进行打包,周期性请求对应epoch时对应分片内的验证节点的验证。步骤5、分片内运行一致性共识协议。
本技术方案的,所述步骤1中采用的是分片区块链的链结构,区块分为主链区块和分片链区块;主链区块记录此epoch中验证节点的身份、网络分片验证节点重分配的结果、上一个epoch中各个分片的最后一个区块的哈希值、各个地址账户的状态余额;分片链区块则是主要由验证节点打包记录此分片负责处理的交易;每个验证节点存储的区块是其对应分片的分片链区块和主链区块;在每个epoch每个分片内的第一个区块其块头中同时记录本epoch的主链区块的哈希值和上一个epoch中本分片的最后一个区块的哈希值。
本技术方案的,所述步骤2中的网络分片重配置,首先其每隔一个时间T,会对验证节点网络分片重分配;其次对当前链上记录的所有地址账户数据的最新状态值,和验证节点分组的信息,所有分片的leader节点会进行一次一致性共识,记录在主链区块内;最后分组完成后,某个分片上一个epoch对应的验证节点不需要向本epoch对应的验证节点传输交易数据,而是由上一个epoch对应的验证节点一直将其保存。
本技术方案的,所述步骤2中利用随机数生成算法和基于可验证随机函数的抽签算法实现定期分组;地址账户的数据的最新状态值记录了每个地址账户的余额;重新分组后,验证节点直接接受新epoch中自己负责的分片需要处理的交易。
本技术方案的,所述步骤3中计算分片的方式是根据交易哈希的最后K比特判断其对应的分片,交易哈希的最后K比特如果是 i, 则由 i 号分片委员会处理该交易。
本技术方案的,所述步骤4中,首先验证节点分配一个存储交易输入UTXO批量验证请求的Map数据结构,用来保存对各个epoch的各个分片委员会的请求;其次,检查交易输入UTXO涉及到的交易的块高度,确定所属epoch和分片;最后批量验证请求,在每一次验证轮次中,负责交易处理的分片委员会将待验证的属于同一epoch同一分片委员会的UTXO的有效性验证请求合并为一批,查询主链区块,找到epochID + shardID组合所对应的分片的节点集合,并一次将对这些UTXO有效性验证请求发送给这些节点,请求其根据其存储的历史交易区块数据验证输入交易UTXO的有效性并对其有效性进行签名。
本技术方案的,所述步骤4中Map结构的key是负责对交易输入UTXO进行有效性验证的分片委员会ID,由epochID和shardId两部分来确定,其中既有当前epoch的分片委员会,也有历史epoch内的分片委员会;如果所属分片位于本epoch内的其他分片内,则将其交易输入UTXO的验证请求存储在对应的Map项中,如果对应分片对应的是跨epoch的历史epoch的某个分片,则首先查询最新的主链区块内存储的输入UTXO对应的地址的余额,如果余额不足则此笔交易无效,如果余额满足则根据输入UTXO所在交易的块高度到主链区块查询此交易的所对应的epochID和shardID,将该笔交易输入UTXO验证存储在Map内;验证的分片委员会检查每个UTXO的有效性,并将批量验证的结果发送给请求的分片委员会,由于将多个UTXO有效性验证请求聚合到同一批请求中,因此可以在验证委员会为多个验证生成结果。
与现有技术相比,本发明的一种区块链分片的高效存储重配置方法的有益效果在于:1、实现轻量级的区块链网络重配置流程,减小了分片区块链重配置时数据传输规模,减轻了重配置的网络负载压力,实现轻量级、快速、客户端无感知的分片节点重配置,增强了重配置过程中的安全性;2、优化了区块链跨片交易的处理流程,主链区块充当跨片交易处理路由表,合理简单、高效。
附图说明
图1是本发明的一种区块链分片的高效存储重配置方法的工作流程结构示意图;
图2是本发明的一种区块链分片的高效存储重配置方法采用的分片区块链的链结构示意图。
具体实施方式
下面结合附图和具体实施例,进一步阐明本发明。
实施例
如图1和图2所示的一种区块链分片的高效存储重配置方法,包括以下步骤,步骤1、验证节点运行网络划分重配置协议,完成重分组,对主链区块进行共识,主链区块主要记录新epoch里节点的身份、分组信息、地址账户的余额、上一个epoch每个分片最后一个区块的哈希值;步骤2、验证节点切换至最新的网络分片状态,(注意)此时分片对应的新旧验证节点无需进行存储交易数据的交换;步骤3、交易的计算分片,根据交易哈希值的最后K比特决定对应的节点分组;步骤4、交易处理,主链区块充当交易输入跨片验证路由表,判断需要验证的交易输入是否跨分片跨epoch,跨分片跨epoch的交易输入验证根据分片序号和epoch序号分组进行打包,周期性请求对应epoch时对应分片内的验证节点的验证;5、分片内运行一致性共识协议,对交易区块进行有效性验证,共识有效的区块添加在本分片内对应的链上。
进一步优选的,所述步骤1中采用的是分片区块链的链结构,区块分为主链区块和分片链区块;主链区块记录此epoch中验证节点的身份、网络分片验证节点重分配的结果、上一个epoch中各个分片的最后一个区块的哈希值、各个地址账户的状态余额;分片链区块则是主要由验证节点打包记录此分片负责处理的交易;每个验证节点存储的区块是其对应分片的分片链区块和主链区块;在每个epoch每个分片内的第一个区块其块头中同时记录本epoch的主链区块的哈希值和上一个epoch中本分片的最后一个区块的哈希值(其中,通过查询本epoch主链区块获得);及所述步骤2中的网络分片重配置,首先其每隔一个时间T,会对验证节点网络分片重分配;其次对当前链上记录的所有地址账户数据的最新状态值,和验证节点分组的信息,所有分片的leader节点会进行一次一致性共识,记录在主链区块内;最后分组完成后,某个分片上一个epoch对应的验证节点不需要向本epoch对应的验证节点传输交易数据,而是由上一个epoch对应的验证节点一直将其保存。
本发明的区块链分片的高效存储重配置方法,所述步骤2中利用随机数生成算法和基于可验证随机函数的抽签算法实现定期分组;地址账户的数据的最新状态值记录了每个地址账户的余额;重新分组后,验证节点直接接受新epoch中,自己负责的分片需要处理的交易。
进一步优选的,所述步骤3中计算分片的方式是根据交易哈希的最后K比特判断其对应的分片,交易哈希的最后K比特如果是 i, 则由 i 号分片委员会处理该交易;及所述步骤4中,首先验证节点分配一个存储批量交易输入UTXO验证请求的Map数据结构,用来保存对各个epoch的各个分片委员会的请求;其次,检查交易输入UTXO涉及到的交易所在区块的高度,确定所属epoch和分片;最后批量验证请求,在每一次验证轮次中,负责交易处理的委员会将待验证的属于同一epoch同一分片委员会的UTXO的有效性验证请求合并为一批,查询主链区块,找到epochID + shardID组合所对应的分片的节点集合,并一次将对这些UTXO有效性验证请求发送给这些节点,请求其根据其存储的历史交易区块数据验证输入交易UTXO的有效性并对其有效性进行签名。
本发明的区块链分片的高效存储重配置方法,所述步骤4中Map结构的key是对交易输入UTXO进行有效性验证的分片委员会ID,由epochID和shardId两部分来确定,其中既有当前epoch的分片委员会,也有历史epoch内的分片委员会;如果所属分片位于本epoch内的其他分片内,则将其交易输入UTXO的验证请求存储在对应的Map项中,如果对应分片对应的是跨周期的历史epoch的某个分片,则首先查询最新的主链区块内存储的输入UTXO对应的地址的余额,如果余额不足则此笔交易无效,如果余额满足则根据输入UTXO所在交易的块高度到主链区块查询此交易的所对应的epochID和shardID,将该笔交易输入UTXO验证存储在Map内;验证的分片委员会检查每个UTXO的有效性,并将批处理的结果发送给请求的分片委员会,由于将多个UTXO有效性验证请求聚合到同一批请求中,因此可以为多个UTXO有效性验证请求生成结果。
本发明的区块链分片的高效存储重配置方法,属于基于存储分片下的一种处理情形,即在交易存储完全分片的情况下,每一个周期进行分片重配置时数据交换的方式以及由此带来的交易验证的流程优化,尤其是解决了跨片交易如何处理的问题。
本发明的区块链分片的高效存储重配置方法,在网络分片重配置时不进行数据交换的轻量级方案,同时对于跨epoch跨分片的交易输入验证请求进行集中打包多批次验证的方法,而增加的主链区块链记录网络分片历史状态并充当路由的角色。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进,这些改进也应视为本发明的保护范围。