一种区块数据的分配存储方法及系统与流程

文档序号:27489628发布日期:2021-11-22 14:02阅读:96来源:国知局

1.本发明涉及区块链技术领域,尤其是涉及一种区块数据的分配存储方法及系统。


背景技术:

2.区块链技术有望为下一代可信互联网技术提供核心技术支持,目前其主要瓶颈除了共识效率偏低而导致系统吞吐量较低之外,只增不减的链式数据结构导致系统对存储空间的高需求也是其关键难题之一。
3.将区块链数据按照一定的规则划分给不同的节点进行存储,从而减轻单个节点的存储压力是其中一种较为通用的思路。目前业界普遍采用的侧链技术,能够一定程度上减轻系统的整体存储压力。但由于同一个节点可以同时加入不同的侧链,而不同的侧链一般情况下又仅由部分节点存储,那么就存在信息孤岛的情况,某些节点可利用信息差发起双花攻击,从而影响系统的数据一致性而导致交易无法进行。
4.为了确保不存在双花攻击的可能,诚实节点发起一笔交易前,必须花费大量时间和全网节点进行交互,确定对方节点的最新状态,而这又抵消了分布式存储的好处。
5.因此,亟需一种区块分配存储方法以解决现有技术中无法高效、安全可靠地存储交易数据的技术问题。


技术实现要素:

6.本发明的目的是提供一种区块数据的分配存储方法及系统,以解决现有技术中无法高效、安全可靠地存储交易数据的技术问题。
7.本发明的目的,可以通过如下技术方案实现:一种区块数据的分配存储方法,包括以下步骤:交易接收节点接收交易并判断所述交易是否为关键交易,若是,将所述交易进行全网广播,封装节点将所述交易封装到关键交易树中;若否,所述交易接收节点根据所述交易及交易发送节点的公钥确定目标节点,所述封装节点获取所述交易并将其封装到与所述目标节点对应的一般交易树中;其中,所述关键交易为全网节点都关心的交易,所述封装节点是全网节点通过共识算法选出的;所述封装节点计算所述关键交易树及所有一般交易树的根的哈希值并将所述哈希值保存到新区块中,将所述新区块和新增的所述交易进行全网广播;全网各个节点将所述关键交易树和与自身节点对应的一般交易树更新到本地。
8.可选地,交易接收节点接收交易并判断所述交易是否为关键交易之前还包括:全网各个节点通过共识算法选举封装节点,所述封装节点将索引数组和签名数组封装进创世区块中;其中,所述索引数组的元素为节点的序号及节点的公钥,所述签名数组的元素为各节点对所述索引数组的数字签名。
9.可选地,所述一般交易树和所述关键交易树均为默克尔前缀树。
10.可选地,根据所述交易及交易发送节点的公钥确定目标节点包括:
以所述交易及交易发送节点的公钥为参数、以哈希函数为函数,计算所述交易的哈希值,将所述哈希值对全网节点的个数取模得到所述目标节点的序号。
11.可选地,所述封装节点获取所述交易包括:所述交易接收节点将所述交易发送给所述目标节点,所述目标节点验证所述交易的合法性后将所述交易发送至所述封装节点。
12.本发明还提供了一种区块数据的分配存储系统,包括若干个节点,其中:交易接收节点接收交易并判断所述交易是否为关键交易,若是,将所述交易进行全网广播,封装节点将所述交易封装到关键交易树中;若否,所述交易接收节点根据所述交易及交易发送节点的公钥确定目标节点,所述封装节点获取所述交易并将其封装到与所述目标节点对应的一般交易树中;其中,所述关键交易为全网节点都关心的交易,所述封装节点是全网节点通过共识算法选出的;所述封装节点计算所述关键交易树及所有一般交易树的根的哈希值并将所述哈希值保存到新区块中,将所述新区块和新增的所述交易进行全网广播;全网各个节点将所述关键交易树和与自身节点对应的一般交易树更新到本地。
13.可选地,交易接收节点接收交易并判断所述交易是否为关键交易之前还包括:全网各个节点通过共识算法选举封装节点,所述封装节点将索引数组和签名数组封装进创世区块中;其中,所述索引数组的元素为节点的序号及节点的公钥,所述签名数组的元素为各节点对所述索引数组的数字签名。
14.可选地,所述一般交易树和所述关键交易树均为默克尔前缀树。
15.可选地,根据所述交易及交易发送节点的公钥确定目标节点包括:以所述交易及交易发送节点的公钥为参数、以哈希函数为函数,计算所述交易的哈希值,将所述哈希值对全网节点的个数取模得到所述目标节点的序号。
16.可选地,所述封装节点获取所述交易包括:所述交易接收节点将所述交易发送给所述目标节点,所述目标节点验证所述交易的合法性后将所述交易发送至所述封装节点。
17.本发明提供了一种区块数据的分配存储方法及系统,其中发包括以下步骤:交易接收节点接收交易并判断所述交易是否为关键交易,若是,将所述交易进行全网广播,封装节点将所述交易封装到关键交易树中;若否,所述交易接收节点根据所述交易及交易发送节点的公钥确定目标节点,所述封装节点获取所述交易并将其封装到与所述目标节点对应的一般交易树中;其中,所述关键交易为全网节点都关心的交易,所述封装节点是全网节点通过共识算法选出的;所述封装节点计算所述关键交易树及所有一般交易树的根的哈希值并将所述哈希值保存到新区块中,将所述新区块和新增的所述交易进行全网广播;全网各个节点将所述关键交易树和与自身节点对应的一般交易树更新到本地。
18.本发明提供的区块数据的分配存储方法及系统,带来的有益效果是:本发明将交易分为关键交易和一般交易,交易接收节点接收交易并判断交易是否为关键交易,若为关键交易,由封装节点将交易封装到关键交易树中,否则,确定目标节点,将交易封装在与目标节点对应的一般交易树中。全网节点共同存储关键交易树,而每个节点只需保存与自身节点对应的一般交易树,能够有效减少存储空间;同时还能保证关键交易由全网节点共同存储,而一般交易只存储在唯一特定的一般交易树中,能防止双花攻击,
便于快速查找交易数据。
附图说明
19.图1为本发明的分配存储方法流程示意图;图2为现有技术中侧链方法的基本拓扑结构示意图;图3为本发明中区块链的组织结构示意图。
具体实施方式
20.本发明实施例提供了一种区块数据的分配存储方法及系统,以解决现有技术中无法高效、安全可靠地存储交易数据的技术问题。
21.为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的首选实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
22.除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
23.区块链技术有望为下一代可信互联网技术提供核心技术支持,目前其主要瓶颈除了共识效率偏低而导致系统吞吐量较低之外,只增不减的链式数据结构导致系统对存储空间的高需求也是其关键难题之一。将区块链数据按照一定的规则划分给不同的节点进行存储,从而减轻单个节点的存储压力是其中一种较为通用的思路。这种方法的最大问题是,如果某个节点由于某些原因,丢失其负责的某些区块数据,那么区块链将很难链在一起,从而导致全网数据可信性降低。寻找一种动态的区块分配与异常应急处理算法是解决这个问题的关键。
24.目前业界普遍采用“分片”或“侧链”技术来实现区块链数据的分布式存储,其基本策略是部分节点先组成一个小群,在里面进行交易,并将最终结果上传主链,从而提高系统吞吐量,并间接减小整个系统的存储开销的策略。
25.请参阅图2,侧链技术通过将不同的侧链存放在各自相关的节点内,不相关的节点则不存储,从而减小了整个系统的存储开销。目前的侧链技术,能够一定程度上减轻系统的整体存储压力。但由于同一个节点可以同时加入不同的侧链,而不同的侧链一般情况下又仅由部分节点存储,那么就存在信息孤岛的情况,某些节点可利用信息差发起双花攻击,从而影响系统的数据一致性而导致交易无法进行。
26.为了确保不存在双花攻击的可能,诚实节点发起一笔交易前,必须花费大量时间和全网节点进行交互,确定对方节点的最新状态,而这又抵消了存储减小的好处。
27.请参阅图1,本发明提供了一种区块数据的分配存储方法的实施例,包括以下步骤:s100:交易接收节点接收交易并判断所述交易是否为关键交易,若是,将所述交易进行全网广播,封装节点将所述交易封装到关键交易树中;若否,所述交易接收节点根据所述交易及交易发送节点的公钥确定目标节点,所述封装节点获取所述交易并将其封装到与
所述目标节点对应的一般交易树中;其中,所述关键交易为全网节点都关心的交易,所述封装节点是全网节点通过共识算法选出的;s200:所述封装节点计算所述关键交易树及所有一般交易树的根的哈希值并将所述哈希值保存到新区块中,将所述新区块和新增的所述交易进行全网广播;s300:全网各个节点将所述关键交易树和与自身节点对应的一般交易树更新到本地。
28.本实施例中,全网节点的个数为n,首先对全网节点从1到n进行编号,p
i
为编号为i的节点的公钥,其中,i为自然数,1≤i≤n。将节点的编号及节点的公钥作为索引数组array的元素,即数组array的元素为(i,p
i
)。
29.全网的各个节点分别对索引素组array进行数字签名,节点i的数字签名为s
i
,其中,i为自然数,1≤i≤n,并将数字签名s
i
全网广播。值得说明的是,数字签名的作用主要是让全网所有节点都承认上述编号方案,从而将各个节点的序号不可抵赖地固定下来,以便于后面的计算。
30.当各个节点均收到其他节点的数字签名后,将所有节点的数字签名组成签名数组s,即s={s1,s2,

, s
i
,
ꢀ…
,s
n
},i为自然数,1≤i≤n,然后将索引数组array和签名数组s封装进创世区块里。
31.值得说明的是,由于创世区块的封装规则和需要的数据是全网一致的,因此全网各个节点都能够在本地生成同样的创世区块。创世区块中有n+1个字段用于存放关键交易分支和一般交易分支的树的根节点的哈希值。由于一开始尚未有交易,因此所有树都是空树,所有树根的哈希值用0填充。
32.请参阅图3,在创世区块后面的所有区块中,区块内除了有一个字段记录前一个区块的哈希值之外,还必须有n+1个字段,其中一个字段记录关键交易树branch1的根的哈希值,剩下的n个字段记录一般交易树branch2的根的哈希值。关键交易树和一般交易树均可采用默克尔前缀树(mpt,merkle patricia tree)结构。
33.值得说明的是,区块的哈希值是将区块的所有字段作为参数、以常用的哈希函数(比如sha)为函数,计算区块的哈希值。
34.全网节点通过常用的共识算法(比如pbft)选出每一个区块的封装节点,不同的共识算法选举出来的封装节点的个数可能不同。
35.每个交易发送节点在发送一笔交易tx前,首先需确定交易tx是关键交易还是一般交易。确定的基本原则是,交易tx内设置有一个字段,用来标记该交易是关键交易还是一般交易,交易发送节点在发出交易tx前对该字段赋值为关键交易或一般交易。其中,关键交易是指全网节点均关心的交易信息,比如,交易“节点a向节点b转账50元”,由于该交易会影响到交易发送节点a、交易接收节点b的余额,进而会影响节点a、b可向全网其他节点转账的金额,因此,全网节点都希望知道该交易最终是否成功,交易“节点a向节点b转账50元”为关键交易。一般交易是指只与少数几个节点有关的交易,除了这几个节点,其他节点均不关心该交易。
36.当全网的任一节点收到一笔交易tx时,判断交易tx是否为关键交易,如果为关键交易,则交易接收节点将该交易直接发给相邻节点或者全网广播,直接发给相邻节点,可以减少网络间的通信压力,但可能会延迟达成共识的速度;全网广播会增加网络压力,但可能
会加快达成共识的速度,需根据实际情况选取。同时,交易接收节点将交易tx发送给当前的区块封装节点,由封装节点将该交易封装进关键交易树branch1,按照mpt树的整棵树的更新算法(已有成熟的算法)更新关键交易树的根。
37.如果交易tx为一般交易,则以交易tx、该交易的发送节点的公钥为参数,以常用的哈希函数(比如sha)为函数,计算交易tx的哈希值hash;然后根据公式index=hash%n计算目标节点的编号,交易接收节点将交易tx发送给目标节点index。目标节点index检验交易tx里的交易内容字段以及相应的签名字段,是否与交易发送节点的公钥相符,对交易tx的合法性验证无误后,目标节点index将交易tx发给当前的区块封装节点,由封装节点将交易tx添加到目标节点index所对应的一般交易树中,并更新该一般交易树的根。
38.值得说明的是,一般交易树和关键交易树均为默克尔前缀树(即mpt)。mpt树分为多层,其层数跟交易的哈希值的长度相关(通常是层数=哈希长度+2)。比如所有交易的哈希值的长度均为4,那么mpt树的第一层是树根,第二层到倒数第二层依次存放哈希的各个位上的值。比如,第一个交易的哈希值为“5831”,那么第二层存放“5”,第三层存放“8”,第四层存放“3”,第五层存放“1”,最后一层存放整个交易tx的具体内容。如果第二个交易的哈希值是“5432”,那么其会与第一个交易共用“5”所在的第二层。如果第三个交易的哈希值是“7831”,虽然后面的“831”与第一个交易是相同的,但是其哈希值的最高位为7,与第一个交易的哈希值最高位上的“5”不同,因此,需要重新开辟一个树内的分支存放第三个交易的哈希值“7831”。
39.本实施例中,关键交易树和一般交易树都为mpt树,将关键交易封装在关键交易树中,将一般交易封装在与目标节点对应的一般交易树中。若要查找某个交易的具体内容,只需按照其哈希值,顺着树根往下查找,一直找到树的叶子节点即可,叶子节点中保存的就是交易的具体内容。
40.区块封装节点如果已经封装了一定量的交易或距离上一次区块封装已经过去了预设时间,优选的实施方式,预设时间为5秒,区块封装节点可以结束该区块的封装,同时,计算关键交易树和所有的一般交易树的根的哈希值,将各棵树的根的哈希值存放到新区块的对应字段上,然后以新区块内的各字段的值为参数,并使用常用的签名算法(如rsa),利用封装节点的私钥,对新区块进行签名操作,并将新区块(包括其内的各字段以及签名)和各棵树中新增的交易进行全网广播。
41.全网各个节点收到广播后,利用封装节点的公钥对新区块进行签名验证操作,验证通过后,更新关键交易树和与自身节点对应的一般交易树,将关键交易树中的新增交易更新到本地数据库,同时仅更新与自身节点对应的一般交易树,仅将与自身节点对应的一般交易树中的新增交易更新到本地,将与自身节点无关的交易收到后即丢弃。
42.本实施例中,根据交易的性质(为关键交易或一般交易)确定不同的交易存储方式,全网节点共同存储都关心的关键交易,一般交易只存储在唯一特定的目标节点中,这种合作存储的过程中所有节点实际上已经达成共识。
43.本实施例中,各个区块与各棵树仅通过其树根的哈希值进行联系,一个完整的区块链包括上述各个区块(即区块里的各个字段)以及与最新区块相连的各棵树(关键交易树和所有的一般交易树)。
44.本实施例将交易分为关键交易和一般交易,交易接收节点接收交易并判断交易是
否为关键交易,若为关键交易,由封装节点将交易封装到关键交易树中,否则,确定目标节点,将交易封装在与目标节点对应的一般交易树中。全网节点共同存储关键交易树,而每个节点只需保存与自身节点对应的一般交易树,能够有效减少存储空间;同时还能保证关键交易由全网节点共同存储,而一般交易只存储在唯一特定的一般交易树中,能防止双花攻击,便于快速查找交易数据。
45.现有技术中,无法同时兼顾减小存储空间和防止双花攻击,一旦采用侧链技术,那么恶意节点攻击成功的概率极大增加。本实施例中每一个交易都可以明确在哪个分支上,如果是关键交易,那么就在关键交易分支上,如果是一般交易,就在唯一的特定的一般交易分支上,很难被双花攻击。
46.现有技术中,每个侧链上的交易是小范围节点的私下交易,存在监管漏洞,本实施例中的所有交易分支都公开,只不过不同的一般交易分支由对应的节点存储,易于监管。
47.现有技术中在查找交易时,如果具体交易是存在侧链上,那么除了遍历所有侧链外,很难快速找到该交易的相关内容,本实施例仅需进行简单的哈希计算,即可确定交易的具体位置,交易查找效率高。
48.本发明实施例采用主次分明的区块存储分配策略,能够优化存储空间;同时,每个交易可被唯一地确定在某个一般交易分支上,不存在双花可能,能够快速查找任一交易,减少了查找时间,提高了交易查找的效率。
49.本发明还提供了一种区块数据的分配存储系统的实施例,包括若干个节点,其中:交易接收节点接收交易并判断所述交易是否为关键交易,若是,将所述交易进行全网广播,封装节点将所述交易封装到关键交易树中;若否,所述交易接收节点根据所述交易及交易发送节点的公钥确定目标节点,所述封装节点获取所述交易并将其封装到与所述目标节点对应的一般交易树中;其中,所述关键交易为全网节点都关心的交易,所述封装节点是全网节点通过共识算法选出的;所述封装节点计算所述关键交易树及所有一般交易树的根的哈希值并将所述哈希值保存到新区块中,将所述新区块和新增的所述交易进行全网广播;全网各个节点将所述关键交易树和与自身节点对应的一般交易树更新到本地。
50.本实施例中,交易接收节点接收交易并判断所述交易是否为关键交易之前还包括:全网节点通过共识算法选举封装节点,将索引数组和签名数组封装进创世区块中;其中,所述索引数组的元素为节点的序号及节点的公钥,所述签名数组的元素为各节点对所述索引数组的数字签名。
51.可选地,所述一般交易树和所述关键交易树均为默克尔前缀树。
52.可选地,根据所述交易及交易发送节点的公钥确定目标节点包括:以所述交易及交易发送节点的公钥为参数、以哈希函数为函数,计算所述交易的哈希值,将所述哈希值对全网节点的个数取模得到所述目标节点的序号。
53.可选地,所述封装节点获取所述交易包括:所述交易接收节点将所述交易发送给所述目标节点,所述目标节点验证所述交易的合法性后将所述交易发送至所述封装节点。
54.本实施例将交易分为关键交易和一般交易,交易接收节点接收交易并判断交易是
否为关键交易,若为关键交易,由封装节点将交易封装到关键交易树中,否则,确定目标节点,将交易封装在与目标节点对应的一般交易树中。全网节点共同存储关键交易树,而每个节点只需保存与自身节点对应的一般交易树,能够有效减少存储空间;同时还能保证关键交易由全网节点共同存储,而一般交易只存储在唯一特定的一般交易树中,能防止双花攻击,便于快速查找交易数据。
55.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
56.在本技术所提供的实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
57.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
58.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
59.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
60.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1