一种区块链的周期性存储空间回收方法与流程

文档序号:17184914发布日期:2019-03-22 21:15阅读:344来源:国知局
一种区块链的周期性存储空间回收方法与流程

本发明涉及区块链技术领域,具体涉及一种区块链的周期性存储空间回收方法。



背景技术:

在区块链系统中,数据会记录在数据区块中,每个区块数据包含块头数据和块体数据两个部分组成,其中块头数据占用的存储容量大约是块体数据占用存储容量的千分之一。目前主流的区块链系统中都是通过存储全部的区块数据去验证交易。在这样的区块链系统中,拥有记账权必须要存储全部的区块数据,而验证交易是通过账户余额或者utxo(未被使用的交易输出)集中进行的。在账户余额模式的区块链中,交易的验证是通过账户里的余额进行验证的,而utxo模式的公有链中,交易验证是在utxo集中进行的。由于utxo模式的每笔交易都会花费先前交易的产出,并产生新的产出,这些产出可能会在未来通过交易消耗,因此所有未使用的事务都保存在每个完全同步的节点中。由于目前很多区块链系统的utxo集是需要下载区块进行生成的,所以新加入的节点需要下载全部区块数据才能生成系统的utxo集合,每次有新的区块产生的同时,会更新utxo集合。然而,随着交易数据不断增加,会造成单个节点的存储压力不断增大。在最新的utxocommitment的系统中,提出utxo证明可传输的模式,使用散列值证明新节点加入接收的utxo集的正确性。一方面,这样的系统还在研究阶段;另一方面,虽然这样的系统里记账节点可以不需要下载区块块体数据,只保留记账区块头部数据,但这失去了区块链数据可追溯的特性,而只有少数全节点存储交易数据又造成数据存储集中化的问题。



技术实现要素:

针对区块链系统中,在全节点下载全部区块数据时会造成存储压力不断增大的问题,以及在不需要下载区块块体数据时会失去区块链数据可追溯特性或者只有少数全节点存储交易数据造成数据存储集中化的问题,本发明提供一种区块链的周期性存储空间回收方法。

为解决上述问题,本发明是通过以下技术方案实现的:

一种区块链的周期性存储空间回收方法,包括步骤如下:

步骤1、每当区块链系统产生的区块数据累积达到设定的周期触发条件时,当前区块链系统的所有节点根据节点之间数据交互确定其邻近节点,并根据节点的邻近节点划分存储片区;

步骤2、存储片区划分完成之后,根据存储片区内的所有节点的ip地址,生成存储片区节点ip地址列表,同时存储片区内的所有节点根据存储片区节点ip地址列表进行随机投票选择存储节点;

步骤3、根据步骤2中投票选择的存储节点,存储片区内的所有存储节点的ip地址,生成周期存储节点ip地址列表,同时非存储节点删除其所存储的区块数据的块体数据,仅保留区块数据的块头数据;

步骤4、当有新的节点加入到区块链系统时,则该加入节点首先下载整个区块链系统的全部周期的区块数据,并加入到对应的存储片区中;然后将存储片区ip地址列表和周期存储节点ip地址列表进行对比,当某一周期存储节点ip地址列表中的ip地址有不存在于存储片区ip地址列表中时,则保留该加入节点所下载的该周期的区块数据,当某一周期存储节点ip地址列表中的ip地址都存在于存储片区ip地址列表中时,则删除该加入节点所下载的该周期的区块数据,并在存储片区内广播选择所保留的存储周期的id列表;接着对应存储片区内节点添加加入节点的ip地址到对应的周期存储节点ip地址列表中;最后当前区块链系统继续执行步骤2~3;

步骤5、当区块链系统中的某个节点达到设定的节点离线时效时,则首先更新该离开节点所在片区的周期存储节点ip地址列表,即若该离开节点为存储节点,则在周期存储节点ip地址列表中将该离开节点的ip地址删除,若该离开节点不为存储节点,则保持周期存储节点ip地址列表不变,接着当前区块链系统继续执行步骤1~3。

作为改进,所述区块链的周期性存储空间回收方法,还进一步包括如下步骤:步骤6、若某一存储片区内的离开节点过多,并使得该存储片区内的剩余节点达到最少节点阈值时,则当前区块链系统继续执行步骤1~3。

上述步骤3中,存储片区节点通过片区内广播的形式进行随机投票选择存储节点。

上述步骤3中,每个存储片区内选择一半以上的节点作为存储节点。

与现有技术相比,本发明具有如下特点:

1、通过周期选择存储节点,区块分散存储,减少单个节点的数据存储压力,同时避免数据集中存储的问题。

2、分散存储的同时保证区块链的不可纂改和可追溯性。

附图说明

图1为一种区块链的周期性存储空间回收方法的流程图。

图2为周期选择区块实例图。

图3为一个六个区块作为设定保留区块的实例图。

图4为一个三分区且每个分区九个节点的实例图,实心点为周期存储节点,空心点为周期非存储节点。

图5为生成周期存储地址列表,其中(a)为周期非存储节点,(b)为期存储地址列表,(c)为周期性存储节点。

图6为生成存储周期的id列表。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实例,并参照附图,对本发明进一步详细说明。

参见图1,一种区块链的周期性存储空间回收方法,其具体过程如下:

步骤一、设置周期:

1、根据系统要求,设置周期触发条件:

由于不同的区块链系统,数据验证和区块的产生方式有一些差异,所以设置周期触发条件时可以根据系统本身性能进行设置。

本发明的限定条件是:(1)、根据区块链系统要求,设定保留不同数量的新产生区块,保留最新的若干区块的范围至少为已确认但还未生效的区块和可能进行异常交易回滚的区块。(2)、系统选择删除的区块块体数量必须是条件(1)所保留区块数量的倍数。限定条件(2)中选择删除的块体数量可以根据不同的区块链系统选择不同的数量。

同时满足限定条件(1)和(2)就是周期的触发条件。一旦区块链系统累积产生区块数量达到限定条件的要求的区块数量时,便会开始一个新的周期。

2、周期的时间是动态的:

根据具体系统要求设定周期内保存区块的数量。由于网络带宽或者验证交易的时间的不确定性,那么周期中的各个步骤的时间都不是固定的。因此周期的时间也是动态的。

例如,等待六个区块确认后,交易才能生效,此时系统周期选择的删除块体的区块至少需要六个区块确认。如图2所示:实心虚线区块表示即将完成六个区块确认,待空心虚线区块产出完成(即所有实心区块完成6区块确认),这个实心虚线区块和前面5个实心区块变成一个周期内选定删除的区块(假设区块高度为100-106)。这样的周期选定区块可以根据系统要求情况,适当调整周期。

步骤二、划分存储片区:

节点选择参与存储分片,周期内存储节点存储本周期内的完整区块数据。在产生区块累积达到周期触发条件之后,区块链系统根据邻近节点ip地址划分存储片区。划分存储片区简单描述:全网根据邻近节点ip地址分配n个邻近节点为一个存储片区,每次存储调整周期之后,下次重新根据邻近节点ip地址,再次进行周期的存储分片(节点稳定在线的情况下,存储分片内的节点的是固定不变的)。

划分存储片区原理:例如,有节点a、b、c,a和c都是b的邻近节点。那么节点a和c也距离很近,由此我们可以得出这样的关系:|ab|<δ∧|bc|<δ=>|ac|<ζ(|ab|+|bc|),其中δ是节点之间邻近关系判断的上限。ζ是放大系数,而判断两个节点为邻近节点,则他们之间的延迟应该小于一个定值。那么在划分存储片区中应用贪心策略,一个存储片区{an}的生成:

其中n是一个片区的节点数量。根据系统性能,n∈(t,m),t是一个存储片区最小的节点数量,m是一个存储片区最大的节点数量。初次划分存储片区之后,系统再次划分存储片区是有条件的,这个条件是节点优先选择上一个所属存储片区的节点作为同一存储片区的节点。

步骤三、生成当前存储片区节点ip地址列表,选择存储节点:

生成当前存储片区ip地址列表:在步骤二中周期存储片区分配完成之后,存储片区内的所有节点生成当前存储片区节点ip地址列表。存储片区节点ip地址列表更新时间:在一个新的周期划分存储片区之后,更新存储片区节点ip地址列表。

选择存储节点:生成当前存储片区节点ip地址列表之后,所有节点根据当前存储片区节点ip地址列表进行随机投票选择存储节点,存储片区节点通过片区内广播的形式计算投票结果。存储节点的数量:在本方法中在每个存储片区内选择一半以上的节点为存储节点。例如,一个片区有m个节点,选择存储节点时,存储片区内选择m/2(m为偶数)或者(m+1)/2(m为奇数)个节点作为存储节点。

选择存储节点规则:每个节点不得连续作为存储节点超过两次。这样做的目的是让区块数据分散存储,保证交易数据可用性,避免由全部区块由少量全节点存储造成的数据集中化问题。

计票方法:先对比前一个周期的存储ip地址列表,找到相同的ip的票数减半,然后根据排名选出周期存储节点。节点得票数排在前50%(m为偶数)或者前(m+1)/2m(m为奇数)的节点自动成为存储节点。

如图4一个三存储片区的例子,每个片区9个节点,每个周期选择5个节点作为存储节点。

步骤四、生成周期存储节点ip地址列表,周期内非存储节点删除块体数据:

根据步骤三选择的存储节点,存储片区内所有节点都生成对应的周期存储节点ip地址列表。非存储节点删除本周期内的区块的块体数据保留块头数据。非存储节点保留块头数据是为了今后获取交易数据的验证之用。如图5所示;周期存储节点和周期非存储节点都存周期存储ip地址列表。

步骤五、新节点加入存储片区分配时:

新加入节点下载已生效的全部区块数据和达到周期触发条件的当前最新的完整区块数据。然后根据步骤二分配存储片区,从存储片区内邻近节点下载片区内所有周期的存储节点ip地址列表,通过对比当前存储片区ip地址列表和周期存储节点ip地址列表,保留本存储片区内的存储节点较少的区块块体数据,删除其他块体数据且只保留块头数据。

新加入节点在加入存储片区后,需要选择保留存储片区内的本周期存储节点存储较少的区块块体数据的目的是抵消存储节点退出造成的存储分布不均匀,有利于邻近节点的快速获取未存储的数据。

新加入节点,必须保证下载了区块数据与系统同步,并在系统周期调整时参与存储分区。如图3所示,需要保留六个块,删除六个块体为一个周期的系统,新加入节点在存储节点选择时,同步下载了最新的12个块。

步骤六、新加入节点在存储片区内广播它所存储周期的id列表,片区节点在周期存储ip地址列表里添加新节点ip地址:

新加入节点,在步骤五中选择保留存储片区内存储较少块体数据之后,生成对应存储周期的周期id列表。新加入节点在存储片区内广播它所存储周期的id列表,存储片区内的节点依照新节点广播存储周期的id列表,添加新节点的ip到对应周期的存储节点ip地址列表内。如图6,新节点生成的存储周期id列表,列表显示选择存储周期内区块高度区间。

步骤七,设定片区存储节点离线时效,定期更新周期存储ip地址列表。

根据系统产生数据的能力不同,可以选择定期更新存储片区内的周期存储节点ip地址列表;在周期存储列表里删除退出一段时间的节点ip。例如,选择10个周期更新一次周期存储节点ip地址列表。如当前完成90个周期,用(80,90]周期和(0,80]周期的存储节点ip地址列表对比当前存储片区ip地址列表,找出(80,90]周期中不存在当前存储片区节点ip地址列表的ip地址{pi}和(0,80]周期中不存在当前存储片区节点ip地址列表的ip地址{qi}。用{qi}对比{pi},找出{qi}中不存在于{pi}的ip地址,即是超过十个周期不存在的ip地址,把这些ip判断为退出存储片区的节点。在(0,80]周期存储节点ip地址列表里删除这些超过十个周期不存在的ip地址。

若出现一个存储片区内同时消失大多数节点的情况,系统可根据现存节点的邻近节点,在步骤二周期存储片区分配时把在线的节点重新分配到其他邻近节点的存储片区,加入邻近节点存储片区的节点需要更新周期存储节点ip地址列表。更新的方法为:首先生成存储周期id列表,广播到当前存储片区,当前存储片区内节点添加广播节点的ip到对应的周期存储节点ip地址列表中,广播节点删除旧的周期存储节点ip地址列表,下载新的周期存储节点ip地址列表。

本发明的基本思想是:所有验证节点在保证最近区块交易已被确认的前提下,从前面的区块中周期性的选择某一高度区间的区块,让一部分节点保留这些区块数据,其余的节点则只保留这些区块块头数据而删除块体数据。需要说明的是,尽管以上本发明所述的实施例是说明性的,但这并非是对本发明的限制,因此本发明并不局限于上述具体实施方式中。在不脱离本发明原理的情况下,凡是本领域技术人员在本发明的启示下获得的其它实施方式,均视为在本发明的保护之内。

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