会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 区块链账本 / 一种区块链账本的存储系统

一种区块链账本的存储系统

申请号 CN202110305256.3 申请日 2021-03-19 公开(公告)号 CN112905616B 公开(公告)日 2022-09-23
申请人 广东科学技术职业学院; 发明人 刘昌平; 刘海; 唐懿芳; 钟达夫;
摘要 本发明公开了一种接口模块、账本逻辑模块、数据库模块与文件存储模块;所述接口模块,用于向区块链网络节点提供节点注册接口、存储完整区块接口、存储简略区块接口和查询统计接口;账本逻辑模块,用于向区块链节点提供注册、存储区块及数字签名、查询统计功能,同时修复账本、维护账本日志和状态数据库的完整一致性;数据库模块,由一个概要数据库和若干个状态数据库构成;为每个区块链账本建立一个状态数据库,并维护一个概要数据库,包括所有区块链账本概要数据和节点概要数据;文件存储模块,用于存储每个区块链账本的账本日志、运行日志和若干个节点的数字证书。
权利要求

1.一种区块链账本的存储系统,其特征在于,所述系统包括:接口模块、账本逻辑模块、数据库模块与文件存储模块;所述接口模块,用于向区块链网络节点提供节点注册接口、存储完整区块接口、存储简略区块接口和查询统计接口;

账本逻辑模块,用于向区块链节点提供注册、存储区块及数字签名、查询统计功能,同时修复账本、维护账本日志和状态数据库的完整一致性;

数据库模块,由一个概要数据库和若干个状态数据库构成;为每个区块链账本建立一个状态数据库,并维护一个概要数据库,包括所有区块链账本概要数据和节点概要数据;

文件存储模块,用于存储每个区块链账本的账本日志、运行日志和若干个节点的数字证书;

所述账本逻辑模块至少包括注册模块、完整区块模块、简略区块模块、查询模块、统计模块和异常处理模块;所述注册模块,用于接收区块链网络节点的注册请求;

完整区块模块,用于将网络节点传递来的完整区块写入账本日志,并更新区块链账本的状态数据库;

简略区块模块,用于将网络节点传递来的数字签名更新到指定区块记录中;

查询模块,通过接口模块的查询统计接口向外界提供区块及负载数据的查询功能,至少包括区块查询、负载数据查询以及概要查询;

统计模块,用于通过接口模块的查询统计接口向外界提供统计功能,至少包括指定节点已签名的区块数、指定节点的活动轨迹、指定节点的离线统计、指定节点的负载统计、指定区块链网络的节点活跃统计;

异常处理模块,用于在系统运行过程中处理异常现象,至少包括:实时修复、事后根据运行日志修复错误并清理运行日志、解析账本日志并修复账本日志错误、解析账本日志修补状态数据库里缺失的数据项。

2.如权利要求1所述的区块链账本的存储系统,其特征在于,所述状态数据库与区块链账本一一对应,由若干个区块记录构成,每个区块记录用区块编号作为区块链账本内唯一性标识,至少包括的数据项有签名数量、区块散列、前置区块散列、偏移地址、区块大小、负载数据和若干个签名构成,其中签名的个数等于签名数量。

3.如权利要求1所述的区块链账本的存储系统,其特征在于,所述账本概要数据包括账本数量、基址路径和若干个账本数据项;节点概要数据至少包括节点数量和若干个节点数据项;其中节点数量表示在系统中注册的所有区块链网络节点的数量,这些节点能够来自多个区块链网络,且每个节点数据项至少包括唯一性标识、证书存储位置。

4.如权利要求1所述的区块链账本的存储系统,其特征在于,区块存储包括完整区块存储和简略区块存储;完整区块存储和简略区块存储分别需要区块链节点提交区块的数字签名;所述完整区块存储还需提交完整的区块内容。

5.如权利要求1所述的区块链账本的存储系统,其特征在于,所述每个区块链账本的存储系统依据注册时提供的数字证书鉴定节点对区块的数字签名是否合法。

6.如权利要求1所述的区块链账本的存储系统,其特征在于,所述区块链节点向账本存储系统提交区块及数字签名时,调用简略区块接口,根据返回结果调用注册接口或完整区块接口。

7.如权利要求1所述的区块链账本的存储系统,其特征在于,所述查询统计功能,能够查询出指定区块的节点签名数量,用于在区块链网络内达成共识目的;以及能够统计出区块链节点的在线和离线状况。

8.如权利要求1所述的区块链账本的存储系统,其特征在于,区块链网络的节点,可以采用该存储系统即账本共享存储的节点,也可以不采用该存储系统,即区块链原节点。

9.如权利要求8所述的区块链账本的存储系统,其特征在于,账本共享存储的节点与区块链原节点共存于同一个区块链网络平台,且每个账本共享存储的节点可配置一个或多个账本存储系统,将区块和数字签名存储到一个或多个账本存储系统;

其中不同的区块链网络平台根据其特性和应用场景定制负载数据的内容与存储形式,根据负载数据定制负载数据查询功能模块。

说明书全文

一种区块链账本的存储系统

技术领域

[0001] 本发明涉及计算机、数据存储与分布式计算技术领域,尤其涉及一种区块链账本的存储系统。

背景技术

[0002] 区块链账本是一种分布式数据库,通常由状态数据库和账本日志构成,状态数据库存储区块数据的最新状态,用数据库技术实现,账本日志以区块编号为序存储完整的区块数据,用磁盘文件实现。
[0003] 为了防止区块链节点篡改区块数据,区块链网络的每个节点存储一份完整的状态数据库和账本日志,利用约定的共识算法达成共识。为了防止部分节点合谋劫持区块链网络,区块链网络的节点数量应尽可能多。
[0004] 区块链账本完整地、分散地存储在每个节点上,给节点的存储系统造成压力。例如在Hyperledger Fabric网络中,以Docker方式实现Peer节点,每个节点存储一份完整的账本,多个Peer节点在宿主机上存储多份完全一致的状态数据库和账本日志。经过一定时间的使用,宿主机的存储系统面临压力,网络中的用户数量越多,交易越频繁,区块链网络使用时间越长,宿主机的存储压力便最大。
[0005] 区块链账本分散地存储在每个节点上,不便于区块链网络的运行监测以及区块数据的挖掘应用,例如同时在线的节点数量、节点在区块链网络中的活动轨迹、区块链网络中的舆情监测与预警等。

发明内容

[0006] 为解决上述技术问题,本发明的目的是提供一种区块链账本的存储系统,该系统解决了区块链网络及其应用中存在的问题。
[0007] 本发明的目的通过以下的技术方案来实现:
[0008] 一种区块链账本的存储系统,包括:接口模块、账本逻辑模块、数据库模块与文件存储模块;所述
[0009] 接口模块,用于向区块链网络节点提供节点注册接口、存储完整区块接口、存储简略区块接口和查询统计接口;
[0010] 账本逻辑模块,用于向区块链节点提供注册、存储区块及数字签名、查询统计功能,同时修复账本、维护账本日志和状态数据库的完整一致性;
[0011] 数据库模块,由一个概要数据库和若干个状态数据库构成;为每个区块链账本建立一个状态数据库,并维护一个概要数据库,包括所有区块链账本概要数据和节点概要数据;
[0012] 文件存储模块,用于存储每个区块链账本的账本日志、运行日志和若干个节点的数字证书。
[0013] 与现有技术相比,本发明的一个或多个实施例可以具有如下优点:
[0014] 区块链网络的节点共享存储区块链账本日志和状态数据库,通过注册接口向账本存储系统提交注册请求,通过完整区块接口、简略区块接口将区块及数字签名提交到存储系统,通过查询统计接口查询区块数据、统计节点在线/离线等信息,异常处理模块维护存储系统内区块链账本和状态数据库的完整性、一致性和准确性。区块链网络的节点能够配置多个区块链账本存储系统,在多个账本存储系统上存储区块及数字签名。

附图说明

[0015] 图1是区块链账本存储系统示意图;
[0016] 图2是概要数据库结构示意图;
[0017] 图3是状态数据库结构示意图;
[0018] 图4是节点注册流程图;
[0019] 图5是存储完整区块的流程图;
[0020] 图6是存储简略区块的流程图;
[0021] 图7是网络节点注册、存储完整区块、简略区块的协作流程图;
[0022] 图8是查询、统计模块结构图;
[0023] 图9是实时修复错误流程图;
[0024] 图10是区块链账本存储系统实施例示意图;
[0025] 图11是区块记录的负载数据实施例示意图;
[0026] 图12是区块的负载数据查询示意图。

具体实施方式

[0027] 为使本发明的目的、技术方案和优点更加清楚,下面将结合实施例及附图对本发明作进一步详细的描述。
[0028] 如图1所示,为区块链账本存储系统图,包括:接口模块、账本逻辑模块、数据库模块与文件存储模块;所述接口模块,用于向区块链网络节点提供节点注册接口、存储完整区块接口、存储简略区块接口和查询统计接口;账本逻辑模块,用于向区块链节点提供注册、存储区块及数字签名、查询统计功能,同时修复账本、维护账本日志和状态数据库的完整一致性;数据库模块,由一个概要数据库和若干个状态数据库构成,为每个区块链账本建立一个状态数据库,并维护一个概要数据库,包括所有区块链账本概要数据和节点概要数据;文件存储模块,用于存储每个区块链账本的账本日志、运行日志和若干个节点的数字证书。
[0029] 节点注册接口、存储完整区块接口、存储简略区块接口和查询统计接口这些接口与账本逻辑模块的注册模块、完整区块模块、简略区块模块、查询模块和统计模块建立对应调用关系;所述文件存储模块由若干个子模块构成,每个子模块至少包括账本日志、运行日志和若干个节点证书。
[0030] 所述的概要数据库,至少由账本概要数据和节点概要数据两部分构成,如图2所示,账本概要数据包括账本数量、基址路径和若干个账本数据项,其中账本数量表示存储的区块链账本总数量,基址路径是指区块链账本的文件存储基地址。所述账本数据项至少包括账本标识、账本存储位置和日志存储位置,其中账本标识是每个区块链账本的唯一性标识,账本存储位置数据项表示账本日志的存储路径,日志存储位置数据项表示运行日志的存储路径。节点概要数据至少包括节点数量和若干个节点数据项,其中节点数量表示在系统中注册的所有区块链网络节点的数量,这些节点能够来自多个区块链网络。每个节点数据项至少包括唯一性标识、证书存储位置,其中证书存储位置是指节点证书的存储路径。
[0031] 所述状态数据库,与区块链账本一一对应,由若干个区块记录构成,如图3所示,每个区块记录用区块编号(或者区块高度)作为区块链账本内唯一性标识,至少包括的数据项有:签名数量、区块散列、前置区块散列、偏移地址、区块大小、负载数据和若干个签名构成,其中签名的个数等于签名数量。偏移地址是指区块在账本文件中的字节偏移量,区块大小是指整个区块的字节数量。负载数据是指区块携带的数据,例如交易数据。区块记录里的签名是指区块链网络节点用自己的私钥对区块的头部数据进行数字签名,每个签名至少包括节点唯一性标识、节点签名数据项和时间戳,节点签名数据项能够用对应节点证书加以鉴定,时间戳是指节点提交区块签名的时间。
[0032] 文件存储模块,存储若干个区块链的账本日志、运行日志和已注册节点的数字证书。每个区块链对应1个账本日志、1个运行日志和若干个节点证书。账本日志是指完整的区块链账本日志,其特征是区块不一定完整按照区块编号(或区块高度)排列。运行日志用于记录异常情况(例如更新状态数据库错误等)。节点证书是指区块链网络节点在系统上注册时提交各自的数字证书。
[0033] 所述账本逻辑模块,至少包括注册模块、完整区块模块、简略区块模块、查询模块、统计模块和异常处理模块。
[0034] 注册模块,接收区块链网络节点的注册请求。网络节点向系统提交区块及数字签名之前需要注册,注册时提交各自的数字证书。注册流程见图4所示,具体包括如下:
[0035] 注册流程的输入:网络节点的唯一性标识、数字证书
[0036] 注册流程的输出:成功或者失败
[0037] 注册流程的步骤:
[0038] 1、接收来自网络节点的注册输入参数;
[0039] 2、在概要数据库的节点概要数据项中搜索网络节点的唯一性标识,如果已存在,则已经注册,跳转到6;否则未注册,跳转到3;
[0040] 3、获取网络节点的数字证书;
[0041] 4、在文件存储模块中存储网络节点的数字证书;
[0042] 5、更新概要数据库的节点概要数据项;
[0043] 6、形成注册结果,返回并结束。
[0044] 所述完整区块模块,将网络节点传递来的完整区块写入账本日志,并更新区块链账本的状态数据库。将完整区块写入账本日志之前,事先需要在区块链账本的状态数据库中已经建立对应的区块记录。完整区块模块流程见图5所示,具体包括如下:
[0045] 完整区块模块流程的输入:网络节点的唯一性标识、账本的唯一性标识、完整区块、区块散列、数字签名
[0046] 完整区块模块流程的输出:成功或者失败、状态码
[0047] 完整区块模块流程的步骤:
[0048] 1、接收参数,参数合法性检查;
[0049] 2、在概要数据库的节点概要数据项中搜索网络节点的唯一性标识,如果未注册,跳转到11;
[0050] 3、在概要数据库的账本概要数据中检查账本唯一性标识,如果账本不存在,则跳转到4,否则跳转到5;
[0051] 4、初始化新账本,创建新账本的账本日志和运行日志,更新概要数据库的账本概要数据;
[0052] 5、根据网络节点的唯一性标识检索出节点的数字证书并鉴定数字签名,如果非法,则跳转到11;
[0053] 6、在状态数据库中检查是否存在指定的区块记录,如果不存在,则跳转到11;
[0054] 7、在区块记录中检查区块是否已写入账本日志,如果是,则跳转到11;
[0055] 8、将完整的区块写入账本日志,如果写入失败,则跳转到10;
[0056] 9、从区块中提取负载数据并写入区块记录,更新状态数据库,如果写入失败,则跳转到10,否则跳转到11;
[0057] 10、将异常情况写入运行日志;
[0058] 11、返回结果并结束。
[0059] 所述简略区块模块,将网络节点传递来的数字签名更新到指定区块记录中。简略区块模块流程见图6所示,具体包括如下:
[0060] 简略区块模块流程的输入:网络节点的唯一性标识、账本的唯一性标识、区块编号、区块散列、数字签名
[0061] 简略区块模块流程的输出:成功或者失败,状态码
[0062] 简略区块模块流程的步骤:
[0063] 1、接收参数,参数合法性检查;
[0064] 2、在概要数据库的节点概要数据项中搜索网络节点的唯一性标识,如果未注册,跳转到11;
[0065] 3、在概要数据库的账本概要数据中检查账本唯一性标识,如果账本不存在,则跳转到4,否则跳转到5;
[0066] 4、初始化新账本,创建新账本的账本日志和运行日志,更新概要数据库的账本概要数据;
[0067] 5、根据网络节点的唯一性标识检索出节点的数字证书并鉴定数字签名,如果非法,则跳转到11;
[0068] 6、在状态数据库中检查是否存在指定的区块记录,如果不存在,则跳转到7,否则跳转到8;
[0069] 7、新建1个区块记录,并填写区块记录的各数据项,将新区块记录更新到状态数据库,跳转到9;
[0070] 8、将网络节点的数字签名及当前时间追加到指定区块记录的签名列表中;
[0071] 9、如果写入状态数据库失败,则跳转到10,否则跳转到11;
[0072] 10、将异常情况写入运行日志;
[0073] 11、返回结果并结束。
[0074] 所述注册模块、完整区块模块、简略区块模块及其模块接口联合操作,响应区块链网络节点的访问请求。网络节点访问这些模块及其接口的流程见图7所示,具体包括:
[0075] 注册模块、完整区块模块、简略区块模块及其模块接口协作流程:
[0076] 1、网络节点调用简略区块接口,获得返回结果,如果成功则跳转到6;
[0077] 2、网络节点分析失败原因,如果未注册,则跳转到3,如果需要完整区块数据,则跳转到4,如果报错,则跳转到5;
[0078] 3、调用注册接口,完成注册后跳转到1;
[0079] 4、调用完整区块接口,如果成功,则跳转到6,否则跳转到5;
[0080] 5、在网络节点本地追加日志,记录异常情况;
[0081] 6、返回结果并结束。
[0082] 所述查询模块,通过接口模块的查询统计接口向外界提供区块及负载数据的查询功能,至少包括区块查询、负载数据查询以及概要查询,见图8所示。按区块号、区块散列值、前置区块散列值查询到唯一区块的内容、大小、在账本日志的偏移量、对该区块签名的节点数量及节点列表、区块附带的负载数据、解析区块数据。按负载数据查询到负载数据所在的区块、负载数据的元数据以及在区块的位置和占用的空间大小。对概要数据库查询到区块链账本概况、节点总数量、指定区块链账本的节点数量、指定节点的证书。
[0083] 所述的统计模块,通过接口模块的查询统计接口向外界提供统计功能,见图8所示,至少包括指定节点已签名的区块数、指定节点的活动轨迹、指定节点的离线统计、指定节点的负载统计、指定区块链网络的节点活跃统计。查询统计功能,能够查询出指定区块的节点签名数量,用于在区块链网络内达成共识目的;以及能够统计出区块链节点的在线和离线状况。
[0084] 指定节点已签名的区块数:节点在特定区块链账本中上传的区块签名数;
[0085] 指定节点的活动轨迹:节点上传区块签名的时间序列;
[0086] 指定节点的离线统计:以每个区块的最早签名时间戳为依据,并设置上传区块签名的最迟时间,统计节点的离线状况;
[0087] 指定节点的负载统计:节点调用智能合约函数,产生区块的负载数据,统计指定节点的负载数据量;
[0088] 指定区块链网络的节点活跃统计:以时间为序列,统计区块链网络中在线的节点数量、离线的节点数量。
[0089] 所述的异常处理模块,在系统运行过程中处理异常现象,至少包括:实时修复(例如数据库更新错误)、事后根据运行日志修复错误并清理运行日志、解析账本日志并修复账本日志错误(例如重复写区块等)、解析账本日志修补状态数据库里缺失的数据项。
[0090] 所述的实时修复模块,与完整区块模块、简略区块模块并发执行。当完整区块模块、简略区块模块发生故障而引发错误时,生成请求参数并加入到区块请求队列,由实时修改模块延后处理,流程如图9所示,具体包括:
[0091] 实时修复模块流程的输入:区块请求队列
[0092] 实时修复模块流程的输出:无
[0093] 实时修复模块流程的步骤:1、启动实时修复模块;
[0094] 2、进入定时休眠;
[0095] 3、当前系统是否空闲,如果否,则跳转到2,如果是,则跳转到4;
[0096] 4、取出1个区块请求,如果成功,跳转到5,否则,跳转到2;
[0097] 5、执行区块请求,如果成功,跳转到6,否则,跳转到2;
[0098] 6、从队列中删除区块请求,跳转到2。
[0099] 所述的事后根据运行日志修复错误并清理运行日志,执行定时任务,将未能实时更新到状态数据库的区块请求,同步更新到区块链账本的状态数据库,保持区块链账本日志和状态数据库的一致性。
[0100] 所述的解析账本日志并修复账本日志错误,执行定时任务,扫描区块链的新增账本日志,解析新增区块,删除重复的区块,对于缺失的区块向在线节点发出重新请求。
[0101] 所述的解析账本日志修补状态数据库里缺失的数据项,执行定时任务,扫描区块链的新增账本日志,解析新增区块,修补图3所示区块记录中缺失的偏移地址、区块大小、负载数据等数据项。
[0102] 所述每个区块链账本的存储系统依据注册时提供的数字证书鉴定节点对区块的数字签名是否合法。
[0103] 区块链节点向账本存储系统提交区块及数字签名时,调用简略区块接口,根据返回结果调用注册接口或完整区块接口。
[0104] 区块链网络的节点,可以采用该存储系统即账本共享存储的节点,也可以不采用该存储系统,即区块链原节点。
[0105] 账本共享存储的节点与区块链原节点共存于同一个区块链网络平台,且每个账本共享存储的节点可配置一个或多个账本存储系统,将区块和数字签名存储到一个或多个账本存储系统;。
[0106] 其中不同的区块链网络平台根据其特性和应用场景定制负载数据的内容与存储形式,根据负载数据定制负载数据查询功能模块。
[0107] 以超级账本(Hyperledger Fabric)为例,说明本实施例内容在超级账本区块链网络上的具体实施方式:
[0108] 区块链账本的存储系统,对超级账本的Peer节点进行改造:在把区块写入本地账本日志时,按照图7所示流程向账本存储系统注册、提交区块及参数。改造的Peer节点设置有1个区块链账本存储系统接口列表,见图10所示,表示Peer节点将在这些存储系统上存储区块链账本,改造的Peer节点与超级账本区块链原生Peer节点共存于区块链网络中。
[0109] 采用Web Service方式的接口模块。在图1中,超级账本的1个通道对应1个账本日志和状态数据库,用磁盘文件实施账本日志、运行日志和若干节点证书的存储,其特征在于,不要求账本日志里的区块按编号(序号或高度)排列。
[0110] 区块记录的负载数据由若干条交易数据构成,见图11所示,每条交易数据包括:交易在区块内的编号、交易散列值、交易在区块内的偏移量、交易的空间大小。
[0111] 负载数据查询实施例,见图12所示,包括:交易所在区块号和散列值、交易的元数据、交易在区块的位置和空间大小、与交易相关的数字证书和智能合约、与交易相关的组织、与交易相关的交易。
[0112] 虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。