一种基于分层树状结构的区块链信息高效存储方法及装置与流程

文档序号:17016008发布日期:2019-03-02 02:27阅读:216来源:国知局
一种基于分层树状结构的区块链信息高效存储方法及装置与流程

本发明涉及区块链技术领域,特别涉及一种基于分层树状结构的区块链信息高效存储方法及装置。



背景技术:

区块链是按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,是一项包括了分布式存储、点对点传输、共识机制、加密算法等技术的新型应用模式。区别于传统的中心化应用,由于每个节点都包含了区块链中完整的账本信息,所以区块链技术具有去中心化的特点,即不存在某个节点具备改变全部区块链信息的能力。以此,区块链技术具有很强的不可篡改、不可伪造的特性,保障了数据的可靠性。

为了保证数据没有遭到恶意篡改,以比特币(bitcoin)为例,比特币采用了默克尔树(merkletree)的形式存储交易信息,比特币的交易信息被储存在merkletree的叶子节点上,并根据merkletree的特性,依次向上进行哈希(hash)操作,目前比特币系统中涉及的hash算法包括sha3和sha256等,最终将根节点的hash值存储在区块中。当某个交易信息遭到篡改时,由于hash操作的特性,hash的结果也必然会发生改变,最终根节点的hash值也会发生改变。所以,只需验证储存在区块中的根节点的hash值是否发生改变就可以检验交易信息是否经过篡改。

作为目前重要的区块链应用,以太坊(ethereum)和超级账本(hyperledger)在信息的存储方式上,继承了比特币的某些特点,但又有所创新。以太坊改进了merkletree的方法,将编码后具有相同前缀的交易和账户信息存储在属于同一个父节点的叶子节点中,即merklepatriciatree。超级账本进一步改进了merkletree的方法,将叶子结点改变为桶状结构,利用规定的函数,将账户交易信息存储在指定的桶中,即桶中可能包含多个交易信息,称为buckettree。

目前,区块链技术还未得到广泛的应用,除了政策性因素等影响外,自身技术上同样存在一定的问题。例如,在现有的技术下,区块链交易的存储速度相对比较低下,以比特币为例,每秒钟大约可以处理7笔交易。相比之下,visa在处理交易的速度上,峰值可以达到每秒约14000笔。这就导致比特币无法用于处理高频交易的场景中,大量的交易信息将无法被打包存储到区块链中,造成信息的拥堵。虽然以太坊和超级账本在存储形式上的改进使得它们在信息存储速度上比比特币有所提升,但提升的幅度十分有限,依然难以满足高频交易的需要。

目前,区块链交易速度过慢,以比特币为例,每秒仅可处理7笔交易,造成大量的交易无法被及时打包确认,出现交易信息拥堵的情况,难以满足在日常支付系统中高频交易的应用场景,使得区块链的应用范围极大受限。



技术实现要素:

本发明的主要目的是提出一种基于分层树状结构的区块链信息高效存储方法,旨在克服以上问题。

为实现上述目的,本发明提出的一种基于分层树状结构的区块链信息高效存储方法,包括如下步骤:

s10区块链账户的预设分类:根据区块链场景的需要,将帐户信息预设分类成i组参数集合,i为自然数,其中帐户信息包括帐户的总数n,分层树状结构中桶的数目b,每个桶中帐户的数量x,分层树状结构中单个节点有一个或多少个子节点k,每种帐户数量的所占比a,每种帐户的交易频率r;

s20对多组帐户信息的参数集合进行模拟演算,并根据模拟结果,选出最优参数集合;

s30分层树状结构的构建:确定账户信息桶状存储的决定函数,输入最优参数集合及决定函数,每个桶的高度及每个高度上对应桶的数目,按一定的规则建立分层树状桶结构,根据分层树状桶结构对每个桶进行编号;

s40将帐户信息经过函数计算出该帐户设置的对应的桶的序号,根据编号将帐户信息存储在在分层树状桶结构的相对应的桶中;

s50信息一致性的检验:当交易发生时,帐户信息发生改变,先将桶中帐户信息拼接,进行一次哈希操作,再以此根据分层树状桶结构向上进行哈希操作,若桶中帐户信息未发生改变,则无需进行哈希操作;若桶中的帐户信息发生改变,则重新进行哈希操作,以获取新的根节点的哈希值;校验新的根节点的哈希值是否与其他可信节占的哈希值相一致,若一致,则视为帐户信息未遭到篡改,若不一致,则视为账户信息遭到篡改,则该节点不可信,需要从其他可信节点获取帐户信息以更新。

优选地,所述决定函数式包括:

(1)根据公式计算出每类账户数目;

(2)计算权重向量其中ωik=pik=pi/bi,pi是第i类账户的使用概率,pik代表第i类账户中第k个桶的使用概率;

(3)在权重向量中增加个零,变为ω'=(0,...,0,ω),其中b表示分层树状结构中桶的数目,每一个权重向量中的元素代表一个桶,每个桶所在的高度初始化为1,当k个权重被合并时,表明这k个桶已经确定好,合并所得元素,代表一个树的内部节点。每次合并时,已经确定好的桶所在高度增加1;

(4)当权重数量大于1时,选出k个ω’中最小的权重,求和得出一个新的权重;

(5)舍弃这k个最小权重,将生成的新的权重插入ω’中;

(6)如此循环计算,根据循环计算,获取每个桶的高度及每个高度上对应桶的数目。

优选地,所述30中一定的规则为:按照装有相同的使用频率的帐户信息的桶存储在树状结构的同一高度,且若桶内帐户信息的帐户交易频率越大,所在的桶所处层数越高的规则。

优选地,所述s40中每个所述桶存储多个帐户信息。

优选地,所述s10之前还包括:

s01对帐户信息进行rlp编码,输入经过rlp编码后的账户信息。

优选地,所述函数计算选择取模函数或随机函数。

优选地,若所述函数计算选择取模函数,假定树形结构中共有b个桶,编号从0到b-1,将账户视为一个整数a,令r为a对b取模之后的余数,由于r必然是0到b-1中的一个数,因此r就是账户a对应的桶的编号。

本发明提出了具有创新性的区块链账户存储结构,依托现有的事实,即区块链账户交易频率存在巨大差异性,提出了分层树状结构的存储方法,在保障了区块链信息不可篡改等特性的前提下,对账户按照交易频率进行分层存储。从总体上看,交易频率越高的账户将被存储在越接近根节点的节点中,以减少整体的hash次数。经实验论证,该方法能够显著降低账户存储时的hash次数,使得整体存储时间大为缩短。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。

图1为本发明基于分层树状结构的区块链信息高效存储方法一实施例的方法流程框图;

图2为分层树状桶结构的示意图;

图3为本发明与传统的ethereum和hyperledgerfabric的对比效果图,

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

另外,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

如图1-2所示,本发明提出的一种基于分层树状结构的区块链信息高效存储方法,包括如下步骤:

s10区块链账户的预设分类:根据区块链场景的需要,将帐户信息预设分类成i组参数集合,i为自然数,其中帐户信息包括帐户的总数n,分层树状结构中桶的数目b,每个桶中帐户的数量x,分层树状结构中单个节点有一个或多少个子节点k,每种帐户数量的所占比a,每种帐户的交易频率r;

s20对多组帐户信息的参数集合进行模拟演算,并根据模拟结果,选出最优参数集合;

s30分层树状结构的构建:确定账户信息桶状存储的决定函数,输入最优参数集合及决定函数,每个桶的高度及每个高度上对应桶的数目,按一定的规则建立分层树状桶结构,根据分层树状桶结构对每个桶进行编号;

s40将帐户信息经过函数计算出该帐户设置的对应的桶的序号,根据编号将帐户信息存储在在分层树状桶结构的相对应的桶中;

s50信息一致性的检验:当交易发生时,帐户信息发生改变,先将桶中帐户信息拼接,进行一次哈希操作,再以此根据分层树状桶结构向上进行哈希操作,若桶中帐户信息未发生改变,则无需进行哈希操作;若桶中的帐户信息发生改变,则重新进行哈希操作,以获取新的根节点的哈希值;校验新的根节点的哈希值是否与其他可信节占的哈希值相一致,若一致,则视为帐户信息未遭到篡改,若不一致,则视为账户信息遭到篡改,则该节点不可信,需要从其他可信节点获取帐户信息以更新。

优选地,所述决定函数式包括:

(1)根据公式计算出每类账户数目;

(2)计算权重向量其中ωik=pik=pi/bi,pi是第i类账户的使用概率,pik代表第i类账户中第k个桶的使用概率;

(3)在权重向量中增加个零,变为ω'=(0,...,0,ω),其中b表示分层树状结构中桶的数目,每一个权重向量中的元素代表一个桶,每个桶所在的高度初始化为1,当k个权重被合并时,表明这k个桶已经确定好,合并所得元素,代表一个树的内部节点。每次合并时,已经确定好的桶所在高度增加1;

(4)当权重数量大于1时,选出k个ω’中最小的权重,求和得出一个新的权重;

(5)舍弃这k个最小权重,将生成的新的权重插入ω’中;

(6)如此循环计算,根据循环计算,获取每个桶的高度及每个高度上对应桶的数目。

优选地,所述30中一定的规则为:按照装有相同的使用频率的帐户信息的桶存储在树状结构的同一高度,且若桶内帐户信息的帐户交易频率越大,所在的桶所处层数越高的规则。

优选地,所述s40中每个所述桶存储多个帐户信息。

优选地,所述s10之前还包括:

s01对帐户信息进行rlp编码,输入经过rlp编码后的账户信息。

优选地,所述函数计算选择取模函数或随机函数。

优选地,若所述函数计算选择取模函数,假定树形结构中共有b个桶,编号从0到b-1,将账户视为一个整数a,令r为a对b取模之后的余数,由于r必然是0到b-1中的一个数,因此r就是账户a对应的桶的编号。

本发明提出了具有创新性的区块链账户存储结构,依托现有的事实,即区块链账户交易频率存在巨大差异性,提出了分层树状结构的存储方法,在保障了区块链信息不可篡改等特性的前提下,对账户按照交易频率进行分层存储。从总体上看,交易频率越高的账户将被存储在越接近根节点的节点中,以减少整体的hash次数。经实验论证,该方法能够显著降低账户存储时的hash次数,使得整体存储时间大为缩短。

本发明的技术效果:

(1)分层的树状结构能够确保区块链数据的可靠性,能够对信息是否被篡改进行有效验证;

(2)根据模拟实验,本专利所提出的基于分层树状结构的区块链信息存储方法,相比传统的ethereum和hyperledgerfabric,的确能够有效地减少哈希操作的次数,加快验证的速度,降低能耗。对比效果如图3所示;

(3)该项技术能够有效地提高区块链处理高频交易的速度,更加适合高频交易的场景。并且,交易频率越高,提升效果越明显;

(4)针对该项技术,账户交易频率的差距越大,相比传统方法的优势就越大。本发明具体操作流程如下:

1、根据区块链场景的需要,预设出多组参数集合,包括账户的总量、树状结构的桶的数量、每个桶中存放的账户数量、账户交易频率等信息;

2、进行参数模拟,并根据模拟结果,选出表现较为优秀的参数集合;

3、确定决定函数,即经过rlp编码后的账户,该放置在编号为多少的桶中;

4、根据预设的参数,以及所提出的算法,计算出每种桶的数目和它的高度,并对桶进行编号;

5、将账户信息存储在分层树状桶结构的相对应的桶中;

6、将桶中编码后的账户信息进行拼接并进行哈希操作,再依次向上进行哈希操作,获得树状结构的根节点的哈希值,将根节点的哈希值存储在区块中。

7、当交易发生,账户信息发生改变时,需要重新进行哈希操作,此时,若桶中的账户均未发生交易,则该桶无需重新进行哈希操作。

8、校验根节点的哈希值是否与其他可信节点的哈希值一致,若一致,则认为账户信息为遭到篡改,若不一致,则视为账户信息遭到篡改,则该节点不可信,需要从其他可信节点更新账户信息。

本发明还可借鉴该发明的分层树状结构的思想,若改变算法初始化过程中参数的设定,或者采用类似的生成算法,可以产生与该方法类似的效果,减少整体的hash次数。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。

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