一种区块链快照方法与流程

文档序号:14860856发布日期:2018-07-04 07:18阅读:2292来源:国知局
一种区块链快照方法与流程

本发明涉及区块链技术领域,涉及一种区块链快照方法。



背景技术:

当前,数据节点存储状态数据及交易数据。假设区块链中有x个账户,且x是一个非常大的数值,而区块中只有少数的账户在变更数据;如果使用原有的区块链的快照技术,每个区块都需要存储交易数据及x个账户的状态数据,在形成快照时会造成快照存储空间大,快照存储空间浪费等问题。快照技术是一种动态扩展,其存储空间只增不减,虽然有合并快照、压缩快照等解决方法,但这些方法不能从根本上缩小快照的存储空间。

综上所述,当前需要提供一种技术方案,既能缩小区块链中快照的存储空间,也能快速获得当前区块的状态数据。



技术实现要素:

有鉴于此,本发明提供一种解决或部分解决上述问题的区块链快照方法。

为达到上述技术方案的效果,本发明的技术方案为:一种区块链快照方法,包含以下内容:

快照方法的角色包括:共识节点、数据节点、快照;

共识节点用于共识区块链中每个区块的交易信息;数据节点不参与区块的共识过程,只存储每个经过共识的区块的状态数据的增量数据及交易数据,每隔一定区间区块高度,数据节点为集群做一次快照;快照用于存储区块链的状态数据;

快照方法包括以下步骤:

1.1)每隔一定区间区块高度,数据节点根据本节点保存的状态数据的增量数据及上一个区间区块高度的快照,计算出本区间区块高度的状态数据,并以快照的形式保存;

1.2)数据节点将每个账户的状态数据的增量数据设置为0;

1.3)每生成一个区块,数据节点缓存当前区块内所有账户的交易数据,并记录数据有变动的账户的状态数据的增量数据,其中每个账户的状态数据的增量数据随区间区块高度增加而叠加;

1.4)直到达到下一个区间区块高度时,数据节点以本节点保存的状态数据的增量数据,及上一个区间区块高度的快照,计算出本区间区块高度的状态数据,并以快照的形式保存;

1.5)数据节点将每个账户的状态数据的增量数据设置为0;

当集群中需要加入共识节点时,依照以下步骤进行处理:

2.1)宕机的共识节点从数据节点获取并缓存最新区间区块高度的快照;

2.2)根据上一个快照与当前状态数据的增量数据,获取最新数据节点的状态数据;

2.3)宕机的共识节点正式成为共识节点,并参与共识;

当集群中需要加入数据节点时,依照以下步骤进行处理:

3.1)宕机的数据节点从集群中的其余正常运行的数据节点获取并缓存最新区间区块高度的快照;

3.2)根据上一个快照与当前状态数据的增量数据,获取最新数据节点的状态数据;

3.3)宕机的数据节点正式成为数据节点,并参与存储状态数据的增量数据及交易数据。

共识节点及数据节点需要加入集群的情况包括:节点宕机后重新加入集群,因集群性能要求额外要求节点加入集群。

本发明的有益成果为:本发明提供了一种区块链快照方法,将增量快照技术与区块链技术融合,相比于传统的快照技术,不用每次对节点进行整机快照,既能缩小区块链中快照的存储空间,也能快速获得当前区块的状态数据。此种区块链快照方法,适用于在集群中加入节点的应用场景,可以实现快速同步节点的功能。

附图说明

图1为传统区块链快照方法的示意图;

图2为本发明一种区块链快照方法的示意图。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,能实现同样功能的产品属于等同替换和改进,均包含在本发明的保护范围之内。具体方法如下:

实施例1:本实施例具体说明了区块链快照方法的步骤,如图1和图2:

如图1,图1是传统区块链快照方法。假设区块链上有x个账户,每隔100个高度的区块做一次快照,在高度为10001的区块上时,每个账户的余额为n,生成高度为10001的快照。

从高度为10001到高度为10098的区块都没有进行任何交易,数据节点存储交易数据,及“账户000:n,账户001:n,账户010:n,账户011:n,账户100:n,……,账户x:n”的状态数据;

高度为10099的区块,有一笔由账户001向账户000转账价值为a的交易,此时数据节点存储交易数据,及“账户000:n+a,账户001:n-a,账户010:n,账户011:n,账户100:n,……,账户x:n”的状态数据;

高度为10100的区块产生了一笔由账户010向账户001转账价值为b的交易,此时数据节点存储交易数据,及“账户000:n+a,账户001:n-a+b,账户010:n-b,账户011:n,账户100:n,……,账户x:n”的状态数据;

高度为10101的区块,产生了一笔由账户001向账户011转账价值为c的交易,此时数据节点存储交易数据,及“账户000:n+a,账户001:n-a+b-c,账户010:n-b,账户011:n+c,账户100:n,……,账户x:n”的状态数据;在此区块中要生成高度为10101的快照,直接将状态数据生成快照。

如图2,图2是本发明一种区块链快照方法。假设区块链上有x个账户,每隔100个高度的区块做一次快照,在高度为10001的区块上时,每个账户的余额为n,生成高度为10001的快照,将所有账户的增量设置为0。

从高度为10001到高度为10098的区块都没有进行任何交易,数据节点存储交易数据,却没有存储增量数据;

高度为10099的区块,有一笔由账户001向账户000转账价值为a的交易,此时数据节点存储交易数据,及“账户000:+a,账户001:-a”的增量数据;

高度为10100的区块产生了一笔由账户010向账户001转账价值为b的交易,此时数据节点存储交易数据,及“账户000:+a,账户001:-a+b,账户010:-b”的增量数据;

高度为10101的区块,产生了一笔由账户001向账户011转账价值为c的交易,此时数据节点存储交易数据,及“账户000:+a,账户001:-a+b-c,账户010:-b,账户011:+c”的增量数据;在此区块中要生成高度为10101的快照,根据上一个快照的状态数据,以及本区间区块高度的增量数据,可以快速获得当前区块的状态数据“账户000:n+a,账户001:n-a+b-c,账户010:n-b,账户011:n+c,账户100:n,……,账户x:n”;将状态数据生成快照后,所有账户的增量数据设置为0。

本发明的有益成果为:本发明提供了一种区块链快照方法,将增量快照技术与区块链技术融合,相比于传统的快照技术,不用每次对节点进行整机快照,既能缩小区块链中快照的存储空间,也能快速获得当前区块的状态数据。此种区块链快照方法,适用于在集群中加入节点的应用场景,可以实现快速同步节点的功能。

以上所述仅为本发明之较佳实施例,并非用以限定本发明的权利要求保护范围。同时以上说明,对于相关技术领域的技术人员应可以理解及实施,因此其他基于本发明所揭示内容所完成的等同改变,均应包含在本权利要求书的涵盖范围内。

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