一种改进的区块链账本同步方法与流程

文档序号:22627657发布日期:2020-10-23 19:36阅读:205来源:国知局
一种改进的区块链账本同步方法与流程

本发明涉及区块链技术领域,具体是一种改进的区块链账本同步方法。



背景技术:

区块链采取了分布式存储的设计,且对区块采取了链式存储,链式存储会造成数据冗余大,而分布式存储也会造成大量的存储空间浪费。当一个区块链网络中加入的节点数量多,且该网络产生的交易量很大时,会造成大量的空间资源浪费。另外新的节点想要加入到区块链网络当中时,需要同步所有的区块才能够与其他节点上的数据保持一致,当区块较多的时候,该节点加入到网络中花费的时间周期较长,代价较大。

因此,本发明提供一种改进的区块链账本同步方法来解决上述问题。



技术实现要素:

针对上述情况,为克服现有技术之缺陷,本发明提供一种改进的区块链账本同步方法,有效的解决了在先技术中数据冗余、磁盘空间浪费、新节点加入时同步区块慢、花费周期长的问题。

本发明在区块链中设置普通区块和状态区块,普通区块用于正常存储交易类数据,状态区块用于存储状态数据库的备份文件而不包含交易类数据,状态区块中最新出现而状态区块链称为活跃区块,活跃区块之前的区块则称为历史区块,预设状态区块的打块周期为n从而使每nn个区块为状态区块,将n值记录在创世区块和每个状态区块、每个普通区块中;

每个所述的普通区块和状态区块均包括区块头和区块体,区块体内存储交易类数据或备份文件,区块头中包含前一区块的hash值、当前区块的区块号、最新状态区块的区块号和当前的n值;

在区块链中设置有区块业务节点和区块备份节点,区块业务节点仅备份活跃区块,区块备份节点实时记录全部普通区块和状态区块而不执行其他业务功能。

优选的,交易数据存储在普通区块中,状态数据存储在非关系型数据库内。

优选的,普通区块中存储的交易数据包括每条交易相关的合约名称、入参、执行结果、交易时间、用户签名信息;

非关系型数据库内存储有用户独有的标识和标识对应的资产值。

优选的,区块备份节点的存储空间为500gb~2tb。

优选的,每个节点都即可作为区块备份节点备份全部区块信息也可以作为区块业务节点执行区块链业务功能。

本发明针对在先技术中数据冗余、磁盘空间浪费、新节点加入时同步区块慢、花费周期长的问题做出改进,通过设置周期式存储可有效解决数据冗余、磁盘空间浪费等问题;有效解决新节点加入时同步区块慢,花费周期长的问题,本发明可节省大量内存以及同步时间,全部区块只需要存储在部分指定的数据备份节点当中,使得其他节点的存储空间得到大量释放。

附图说明

图1为本发明状态区块和普通区块的关系示意图。

图2为本发明历史区块和活跃区块的关系示意图。

图3为本发明状态区块区块头结构设计示意图。

具体实施方式

有关本发明的前述及其他技术内容、特点与功效,在以下配合参考附图1至图3对实施例的详细说明中,将可清楚的呈现。以下实施例中所提到的结构内容,均是以说明书附图为参考。

在本发明的描述中,需要理解的是,术语“上”、“中”、“外”、“内”等指示方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的组件或元件必须具有特定的方位,以特定的方位构造和操作,因此不能理解为对本发明的限制。

下面将参照附图描述本发明的各示例性的实施例。

实施例一,本发明为一种改进的区块链账本同步方法,先介绍后续出现的概念词含义:

状态区块:对状态数据库备份,将备份文件作为一个单独的区块,称为状态区块。状态区块仅包含备份文件,不包含其他交易类数据。通常状态区块以n为周期进行存储;

历史区块:最新状态区块之前的(不包含最新状态区块)所有区块称为历史区块;

活跃区块:最新状态区块及之后的所有区块称为活跃区块;

区块备份节点:只同步全部区块不执行任何链上交易的节点;

区块业务节点:为了与区块备份节点作区分,将区块链架构的原有设计中的负责执行智能合约、打块、共识等相关业务的节点统称为区块业务节点;

在区块链中设置普通区块和状态区块,普通区块用于正常存储交易类数据,状态区块用于包含备份文件而不包含交易类数据,预设状态区块的打块周期为n从而使每nn个区块为状态区块,将n值记录在创世区块和每个状态区块、每个普通区块中;

一般区块链中会有两类数据,一类是发生在区块链网络中的交易数据,例如某账户之间的转账记录,新用户注册记录、智能合约的创建等,此类数据特点是:需要永久存储,一旦确认后不再改变;另一类是状态数据,如某人的持币数量,某个键对应的值等,此类数据的特点是经常会发生变化,并且查询修改频繁,针对以上两类数据,采取不同的存储方式进行分别记录,可使区块链网络更加高效;

针对第一类数据,由于其不可改变的特性,在实际业务中,只需要对其进行查看的操作,而无需进行修改。所以适合将其直接放在区块中进行存储,对于第二类数据,由于其经常发生改变,并且业务中经常用到的是它的当前状态(值)而非历史状态(值),所以可选用非关系型数据库进行存储,不仅方便读取和修改,而且效率较高,此数据库记录了所有键的当前状态,所以称为状态数据库,非关系型数据库可采用当前使用较多的leveldb或是couchdb;

将区块分为两种类型,一种是普通区块,即正常业务当中由交易记录打块形成的区块,普通区块就是上面所说的智能合约产生的交易记录;另一种是世界状态区块(以下简称“状态区块”),状态区块就是将状态数据库的当前备份文件以区块的形式存储在区块文件中,这样就可以通过状态区块对状态数据库进行还原,状态区块以n为周期进行打块(本文中提到的n都默认指备份周期),例如:假如n=100,那么等到第99个区块出块以后,节点自动对数据库的当前状态进行备份,将备份文件作为第n个区块加入到区块链当中,状态区块的区块体中仅包含数据库的备份文件,不包含任何交易记录,n的值需要记录在创世区块和状态区块当中;

每个所述的普通区块和状态区块均包括区块头和区块体,区块体内存储交易类数据或备份文件,区块头中包含前一区块的hash值、当前区块的区块号和当前的n值;

在区块链中设置有区块业务节点和区块备份节点,区块业务节点仅备份活跃区块,区块备份节点实时记录全部普通区块和状态区块而不执行其他业务功能,节点在原有基础上增加一类区块备份节点,区块备份节点用于实时同步区块,记录链条上的全部区块,不执行任何业务功能,区块备份节点需要有较大的储存空间,具体的可以是500gb~2tb之间,其可根据业务量设置,业务量小的500gb就可以,若业务量大则可能需要1tb甚至2tb,另外对原有的区块业务节点进行改造,区块业务节点无需备份全部区块,只需备份活跃区块即可参与打块业务,一个节点可同时担任多种角色,即节点可同时作为区块备份节点备份全部区块信息、也可以作为业务节点执行区块链业务功能;

当有新的区块加入到网络当中时,其相应的节点无需对所有区块进行同步,只需要同步活跃区块,即可恢复全部的世界状态数据,具体操作原理是:通过最新的状态区块还原当时的数据库,通过最新状态区块之后的区块使数据库还原到最新状态,从而节省大量内存以及同步时间。

实施例二,在实施例一的基础上,本实施例提供一种具体的案例,在某个资产交易平台中,某人拥有了100份额的代币,该用户可以拿代币进行交易,交易必须要通过自定义的智能合约进行实现,在交易过程中,用户的资产会发生改变,该用户以独一的标识key存储在数据库中,而其对应的资产就是该key对应的值(value);

用户调用智能合约产生交易,在智能合约执行过程中,对其进行日志记录,包含智能合约名称、入参、执行结果、交易时间等,对于前述交易日志,将其存储在普通区块当中,对于用户的标识key和其资产value,则放在非关系数据库中进行存储,即以非关系型数据库作为数据存储模块;通过智能合约来实现对该数据库的增删改查;而调用智能合约产生的日志记录在普通区块当中。

本发明针对在先技术中数据冗余、磁盘空间浪费、新节点加入时同步区块慢、花费周期长的问题做出改进,通过设置周期式存储可有效解决数据冗余、磁盘空间浪费等问题;有效解决新节点加入时同步区块慢,花费周期长的问题,本发明可节省大量内存以及同步时间,全部区块只需要存储在部分指定的数据备份节点当中,使得其他节点的存储空间得到大量释放。

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